WritingMiddleware中间件函数是可以访问请求对象(req)、响应对象(res)和应用程序请求-响应循环中的下一个函数的函数。下一个功能在Express路由器中。调用时在当前中间件之后执行中间件的函数。中间件函数可以执行以下任务:执行任何代码。更改请求和响应对象。结束请求-响应循环。调用堆栈中的下一个中间件。如果当前中间件函数没有结束请求-响应循环,则必须调用next()将控制权交给下一个中间件函数,否则请求将被挂起。下图显示了中间件函数调用的元素:示例下面是一个简单的“HelloWorld”Express应用程序示例,本文的其余部分将定义两个中间件函数并将其添加到应用程序:一个名为myLogger用于打印简单日志消息,另一个调用requestTime来显示HTTP请求的时间戳。varexpress=require('express')varapp=express()app.get('/',function(req,res){res.send('HelloWorld!')})app.listen(3000)中间件函数myLogger这是一个名为“myLogger”的中间件函数的简单示例,当对应用程序的请求通过时,该函数简单地打印“LOGGED”,中间件函数被分配给一个名为myLogger的变量。varmyLogger=function(req,res,next){console.log('LOGGED')next()}注意上面的调用next(),调用这个函数会调用应用程序中的下一个中间件函数,next()函数是不是Node.js或ExpressAPI的一部分,而是传递给中间件函数的第三个参数。next()函数可以任意命名,但按照惯例,它总是命名为“next”,为避免混淆,请始终使用此约定。要加载一个中间件函数,调用app.use(),指定中间件函数,例如下面的代码在路由到根路径(/)之前加载myLogger中间件函数。varexpress=require('express')varapp=express()varmyLogger=function(req,res,next){console.log('LOGGED')next()}app.use(myLogger)app.get('/',function(req,res){res.send('HelloWorld!')})app.listen(3000)每次应用程序收到请求时,它都会向终端输出消息“LOGGED”。加载中间件的顺序很重要:首先加载的中间件功能也将首先执行。如果myLogger在到达根路径的路由之后加载,则请求永远不会到达它,并且应用程序不会打印“LOGGED”,因为根路径的路由处理程序终止了请求-响应周期。中间件函数myLogger只是打印一条消息,然后通过调用next()函数将请求传递给堆栈中的下一个中间件函数。中间件函数requestTime接下来,我们将创建一个名为“requestTime”的中间件函数,并向请求对象添加一个名为requestTime的属性。varrequestTime=function(req,res,next){req.requestTime=Date.now()next()}应用程序现在使用requestTime中间件函数,并且根路径路由的回调函数添加到req使用中间件函数(请求对象)属性。另外,根路由route的回调函数使用了一个添加到req(请求对象)属性的中间件函数。varexpress=require('express')varapp=express()varrequestTime=function(req,res,next){req.requestTime=Date.now()next()}app.use(requestTime)app.get('/',function(req,res){varresponseText='HelloWorld!
'responseText+='Requestedat:'+req.requestTime+''res.send(responseText)})app.listen(3000)当您向应用程序的根目录发出请求时,应用程序现在将在浏览器中显示您请求的时间戳。因为您可以访问请求对象、响应对象、堆栈中的下一个中间件函数以及整个Node.jsAPI,所以中间件函数的可能性是无穷无尽的。有关Express中间件的更多信息,请参阅:使用Express中间件。可配置的中间件如果您需要中间件是可配置的,导出一个接受选项对象或其他参数的函数,并根据输入参数返回中间件实现。File:my-middleware.jsmodule.exports=function(options){returnfunction(req,res,next){//根据选项对象实现中间件功能next()}}中间件现在可以如下使用。varmw=require('./my-middleware.js')app.use(mw({option1:'1',option2:'2'}))请参阅cookie会话和压缩。上一篇:路由下一篇:使用中间件
