码迷,mamicode.com
首页 > 其他好文 > 详细

关于Express的中间件

时间:2017-11-29 16:28:21      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:cti   请求   输出   set   ons   后台   报错   res   next   

var express = require(‘express‘)

var app = express()

app.use(‘/‘,function(req,res,next){

console.log(1)

})

app.get(‘/‘,function(req,res,next){

console.log(2)

})

app.listen(3000)

express 中间件的执行,和它所处的位置很有关系。

代码运行之后,会将前台发送来的url与中间件中的path进行匹配,当url匹配到一个中间件的path匹配成功后,就执行当前的中间件,后面的中间件将不再执行。

所以,对于以上代码,若前端请求的url是‘/‘,则后台只会输出 1,后面的中间件不会再执行下去。

 

若想继续执行下面的中间件,可以使用 next() 函数转交控制权

var app = express()

app.use(‘/‘,function(req,res,next){

console.log(1)

next()

})

app.get(‘/‘,function(req,res,next){

console.log(2)

})

app.listen(3000)

将代码改成上面的形式,在第一个中间件中使用next()函数,那么控制权就转交给了下一个中间件。所以后台会输出 1 和 2;

 

注意:

  若在中间件中已经向客户端响应过请求后,就不允许在使用next() 函数转交控制权。例如

  var app = express()

app.use(‘/‘,function(req,res,next){

console.log(1)

res.send(‘a‘)

next()

})

app.get(‘/‘,function(req,res,next){

console.log(2)

})

app.listen(3000)

以上代码会报错:Can‘t set headers after they are sent。

其实很好理解,当前的中间件都已经响应过请求了,响应已经结束了,又如何再去转交控制权呢?

 

总结:

  对于中间件的执行,按照前端的url与中间件的path匹配,若匹配成功,执行当前中间件,后面的中间件不再执行。

  若想让后面的中间件继续执行,则在当前执行的中间件中使用next()函数,将控制权转交给下面的中间件,前端url继续和下面的中间件的path进行匹配。

  注意,若想在一次请求中,执行多个中间件,应该让最后一个中间件去响应客户端请求,也就是说,转交控制权的中间件不允许再同时响应请求,否则会报错。

关于Express的中间件

标签:cti   请求   输出   set   ons   后台   报错   res   next   

原文地址:http://www.cnblogs.com/zydeblog/p/7920582.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!