ExpressJS - 中间件
中间件函数是可以访问请求对象 (req)、响应对象 (res)以及应用程序请求-响应周期中的下一个中间件函数的函数。这些函数用于修改 req 和 res 对象,以执行解析请求主体、添加响应标头等任务。
以下是中间件函数运行的简单示例 −
var express = require('express'); var app = express(); //简单请求时间记录器 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(); //记录请求协议的中间件函数 app.use('/things', function(req, res, next){ console.log("A request for things received at " + 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(); }); //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 的第三方中间件列表可在此处获得。以下是一些最常用的中间件;我们还将学习如何使用/安装这些 −
body-parser
这用于解析附加了有效负载的请求正文。要安装 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())
要查看 body-parser 的所有可用选项,请访问其 github 页面。
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 中有许多其他第三方中间件。但是,我们在这里只讨论了几个重要的。