Express Postfunction中callback的执行顺序
我遇到了[express的路由处理方法],特别是Post函数的问题。
( http://expressjs.com/api.html#app.VERB )
我正试图通过这个护照示例中的一段代码进行parsing
app.post('/login', passport.authenticate('local', { failureRedirect: '/login', failureFlash: true }), function(req, res) { res.redirect('/'); });
快递文件说
给出多个callback,所有处理都是平等的,并且像中间件一样行为。
我的问题是,准确的说法如下:
中间件就像一堆连接在一起的pipe子。 首先介绍的中间件是首先列出的中间件。 如果数据是水,它将stream经首先列出的pipe道。
路由处理方法中的callback也是如此:callback是连接在一起的pipe道,如果通过这些“pipe道”来倒入数据,则通过列出的第一个callback,然后是第二个callback。 真的吗?
作为后续问题,这些callback应该返回什么? 是第一个callback返回一个响应,第二个callback接收和对待作为一个请求? 应该从pipe道里出来,我可以把它粘到第二根pipe子上吗?
在这种情况下callback没有什么问题。 他们正在调用next
函数(在这个特定的护照示例中未定义的第三个参数)。 当下next
函数被调用时,下一个中间件被调用,其参数与第一个相同(相同的req
,相同的res
)
说你有这个代码
function myFirstMiddleware(req, res, next) {//note the third parameter //you can change req and res objects next(); } function secondMiddlewareInTheSequence(req, res, next) { //here you get the changes you've done to req and res since they are //the same objects res.end(); } app.post('/', myFirstMiddleware, secondMiddlewareInTheSequence);
如果你的请求被正确的authentication,那么passport.authenticate在内部做的是next
调用,所以你的中间件是通过控制的。
你甚至可能不想把控制权交给更多的中间件,这是基于一个特定的条件(几乎是什么护照),就像这样。
function checkSecret(req, res, next) { if(req.query && req.query.secret === '42') { console.log('you are allowed to pass!'); next(); } else { console.log('you shall not pass!'); res.status(403).end(); } }
上述function如果放在任何其他中间件之前,将阻止不包含秘密的请求继续!