ExpressJS - 中间件


中间件函数是可以访问请求对象 (req)响应对象 (res)以及应用程序请求-响应周期中的下一个中间件函数的函数。这些函数用于修改reqres对象,以执行解析请求正文、添加响应标头等任务。

这是中间件功能的一个简单示例 -

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.listen(3000);

服务器上的每个请求都会调用上述中间件。因此,每次请求后,我们都会在控制台中收到以下消息 -

A new request received at 1467267512545

要将其限制为特定路由(及其所有子路由),请提供该路由作为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);

当我们运行此代码后访问“/”时,我们会在控制台上收到中间的响应-

Start
End

下图总结了我们对中间件的了解 -

中间件

现在我们已经介绍了如何创建自己的中间件,让我们讨论一些最常用的社区创建的中间件。

第三方中间件

此处提供了 Express 第三方中间件的列表。以下是一些最常用的中间件;我们还将学习如何使用/安装这些 -

正文解析器

这用于解析附加有有效负载的请求正文。要安装主体解析器,我们需要使用npm install --save body-parser 来安装它并安装它,请在您的 index.js 中包含以下行 -

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 页面。

cookie解析器

它解析Cookie标头并使用以 cookie 名称为键的对象填充 req.cookies。要安装 cookie 解析器,我们需要使用 npm install --save cookie-parser 安装它并安装它,请在您的 index.js 中包含以下行 -

var cookieParser = require('cookie-parser');
app.use(cookieParser())

快速会话

它使用给定的选项创建一个会话中间件。我们将在会话部分讨论它的用法。

我们在 ExpressJS 中还有许多其他第三方中间件。然而,我们在这里只讨论了一些重要的问题。