当前位置: 首页 > 后端技术 > Node.js

Express4.x中间件特性

时间:2023-04-03 14:37:09 Node.js

Express应用基本上是一系列中间件函数调用中间件在管道中执行。您可以想象一根真正的输水管。水从一端泵入,然后在到达目的地之前通过各种仪表和阀门。这个类比的很大一部分是顺序,你把仪表放在阀门前面,效果和后面是不同的。同样,如果您有一个向水中注入某种物质的阀门,则该阀门“下游”的所有物质都将包含这种新添加的成分。在Express程序中,通过调用app.use将中间件插入到管道中。在Express4.0之前,管道有点复杂,因为必须显式连接路由器。根据你连接到路由器的位置,传入路由可能会乱序,这使得管道的顺序不太清楚您混合使用中间件和路由处理程序。在Express4.0中,中间件和路由处理程序按照它们连接的顺序被调用,这使得顺序更加清晰。路由处理程序(app.get、app.post等,通常统称为app.VERB)可以被认为是只处理特定HTTP动词(GET、POST等)的中间件。同样,中间件也可以认为是一个路由处理器,可以处理所有的HTTP动词(基本等同于app.predicate,效果是一样的)。路由处理程序的第一个参数必须是路径。如果您希望路由匹配所有路径,只需使用/*。中间件也可以把一个路径作为第一个参数,但是它是可选的(如果省略这个参数,它会匹配所有的路径,就像指定了/*一样)路由处理器和中间件的参数中都有回调函数,它采取2、3或4个参数(技术上它也可以有0或1个参数,但这些形式没有意义)。如果有2个或3个参数,前两个参数是request和response对象,第三个参数是nextfunction。如果有4个参数,则成为错误处理中间件,第一个参数成为错误对象,接下来是request、response和next对象。如果不调用next(),管道将终止,处理程序或中间件将不会进行进一步处理。如果不调用next(),则应向客户端发送响应(res.send、res.json、res.render等);如果不这样做,客户端将挂起并最终超时。如果调用next(),通常不适合向客户端发送响应。如果您这样做,中间件或路由处理程序将在管道的下方执行,但它们发送的任何响应都将被忽略。varexpress=require('express')varapp=express()varrequestTime=function(req,res,next){req.requestTime=Date.now()console.log(req.requestTime);next()}varrequestUser=function(req,res,next){console.log('welcome');next()}app.use(requestTime)app.get('/',function(req,res){console.log('//welcome');varresponseText='HelloWorld!
'responseText+='Requestedat:'+req.requestTime+''res.send(responseText)})app.use(requestUser)app.listen(3000)访问127.0.0.1:3000输出时间和//welcome不会执行requestUser中间件代码1552630945571//welcome