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如果放在任何其他中间件之前,将阻止不包含秘密的请求继续!