ExpressJS 中间件

  • 中间件

    中间件功能是可以访问请求对象(req),响应对象(res)和应用程序的请求-响应周期中的下一个中间件功能的功能。这些功能用于修改任务的req和res对象,例如解析请求正文,添加响应标头等。这是一个使用中间件功能的简单示例-
    
    var express = require('express');
    var app = express();
    
    //Simple request time logger
    app.use(function(req, res, next){
       console.log("A new request received at " + Date.now());
       
       //This function call is very important. It tells that more processing is
       //required for the current request and is in the next middleware function/route handler.
       next();
    });
    
    
    app.get('/hello', function(req, res){
       res.send("Hello World!");
    });
    
    app.listen(3000);
    
    服务器上的每个请求都会调用上述中间件。因此,在每个请求之后,我们将在控制台中收到以下消息:
    
    A new request received at 1598065207400
    
    要将其限制为特定路由(及其所有子路由),请将该路由作为app.use()的第一个参数提供。例如,
    
    var express = require('express');
    var app = express();
    
    //Middleware function to log request protocol
    app.use('/things', function(req, res, next){
       console.log("A request for things received at " + Date.now());
       next();
    });
    
    // Route handler that sends the response
    app.get('/things', function(req, res){
       res.send('Things');
    });
    
    app.listen(3000);
    
    现在,只要您请求“/things”的任何子路由,只有它会记录时间。
    中间件调用顺序
    Express中中间件最重要的事情之一是它们在文件中的写入/包含顺序。考虑到路由匹配,还需要考虑它们的执行顺序。例如,在以下代码片段中,第一个函数首先执行,然后执行路由处理程序,然后执行结束函数。这个例子总结了如何在路由处理程序之前和之后使用中间件。以及如何将路由处理程序本身用作中间件。
    
    var express = require('express');
    var app = express();
    
    //First middleware before response is sent
    app.use(function(req, res, next){
       console.log("Start");
       next();
    });
    
    //Route handler
    app.get('/', function(req, res, next){
       res.send("Middle");
       next();
    });
    
    app.use('/', function(req, res){
       console.log('End');
    });
    
    app.listen(3000);
    
    运行此代码后访问“/”路径时,我们在浏览器收到“Middle”响应-
    控制台响应如下:
    
    Start
    End
    
    下图总结了我们对中间件的了解-
    既然我们已经介绍了如何创建自己的中间件,那么让我们讨论一些社区最常用的中间件。
  • 第三方中间件

    Express的第三方中间件列表。以下是一些最常用的中间件;我们还将学习如何使用/安装这些-
    bodyParser
    
    var bodyParser = require('body-parser');
    
    //To parse URL encoded data
    app.use(bodyParser.urlencoded({ extended: false }))
    
    //To parse json data
    app.use(bodyParser.json())
    
    要查看body-parser的所有可用选项,请访问其github页面。
    cookieParser
    它解析Cookie头,并使用以cookie名称作为键的对象填充req.cookie。要挂载cookie解析器,我们需要使用npm install --save cookie-parser进行安装并挂载它,在index.js中包括以下几行:
    
    var cookieParser = require('cookie-parser');
    app.use(cookieParser())
    
    express-session
    它使用给定的选项创建会话中间件。我们将在“会话(session)”部分中讨论其用法。ExpressJS中还有许多其他第三方中间件。但是,我们在这里只讨论了一些重要的问题。