Express.js 中间件

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

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

var express = require('express');
var app = express();

// 简单的请求时间记录器
app.use(function(req, res, next){
   console.log("在 " + Date.now() + " 收到新请求!");
   
   //这个函数调用非常重要。 它告诉当前请求需要更多处理,并且在下一个中间件中
   function route handler.
   next();
});

app.listen(3000);

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

在 1649040864933 收到新请求!

要将其限制为特定路由(及其所有子路由),请提供该路由作为 app.use() 的第一个参数。 例如,

var express = require('express');
var app = express();

// 记录请求协议的中间件功能
app.use('/things', function(req, res, next){
   console.log("在 " + Date.now() + " 收到新请求!");
   next();
});

// 发送响应的路由处理程序
app.get('/things', function(req, res){
   res.send('Things');
});

app.listen(3000);

现在,每当您请求任何“/things”的子路由时,它才会记录时间。


中间件调用顺序

Express 中关于中间件的最重要的事情之一是它们被写入/包含在文件中的顺序; 考虑到路由匹配也需要考虑它们的执行顺序。

例如,在下面的代码片段中,第一个函数首先执行,然后是路由处理程序,然后是结束函数。 这个例子总结了如何在路由处理程序之前和之后使用中间件; 以及如何将路由处理程序用作中间件本身。

var express = require('express');
var app = express();

// 在响应被发送之前第一个中间件
app.use(function(req, res, next){
   console.log("Start");
   next();
});

// 路由处理程序
app.get('/', function(req, res, next){
   res.send("Middle");
   next();
});

app.use('/', function(req, res){
   console.log('End');
});

app.listen(3000);

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

Start
End

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

middleware 描述

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


第三方中间件

以下是一些最常用的中间件; 我们还将学习如何使用/安装这些

body-parser

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

var bodyParser = require('body-parser');

// 解析 URL 编码数据
app.use(bodyParser.urlencoded({ extended: false }))

// 解析json数据
app.use(bodyParser.json())

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

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

express-session

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

我们在 ExpressJS 中有许多其他第三方中间件。 但是,我们在这里只讨论了几个重要的。

查看笔记

扫码一下
查看教程更方便