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
下图总结了我们对中间件的了解
现在我们已经介绍了如何创建自己的中间件,让我们讨论一些最常用的社区创建的中间件。
第三方中间件
以下是一些最常用的中间件; 我们还将学习如何使用/安装这些
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-parser
它解析 Cookie 标头并使用由 cookie 名称键入的对象填充 req.cookies。 要挂载 cookie 解析器,我们需要使用 npm install --save cookie-parser 安装它并挂载它,在 index.js 中包含以下代码
var cookieParser = require('cookie-parser');
app.use(cookieParser())
express-session
它使用给定的选项创建一个会话中间件。 我们将在会话部分讨论它的用法。
我们在 ExpressJS 中有许多其他第三方中间件。 但是,我们在这里只讨论了几个重要的。