在Express.js中redirect后调用下一个中间件

我正在通过Express.js中间件的集成testing来驱动行为。 我遇到了一个有趣的情况,在应用程序背后的行为是不可预测的(不是由我,无论如何)。

作为一个简单的例子:

var middlewareExample = function(req, res, next){ if(req.session){ refreshSession(req.session, function(err, data){ if(!err){ res.redirect('/error'); } }); next(); }else{ res.redirect('/authenticate'); } }; 

问题在于next的redirect,因为它在内部函数和条件之外。 我不确定Express是如何将中间件/路由调用处理为nextres.redirect如果它们恰好发生在彼此之前或之后,如上所述。

手动testing没有发现任何奇怪的行为,超级模块也没有。 我想知道Express是否以及如何回应这种情况。 另外,supertest可以用来揭露任何潜在的不良行为。 另外,如果可以的话,我想听听别人用什么方法来testingNode / Express中间件。

你在同一个请求中发送两个响应。 next()是一个响应,假设下一个处理程序也有响应, res.redirect()也是res.redirect() 。 你真正想要的是:

 var middlewareExample = function(req, res, next){ if(req.session){ refreshSession(req.session, next); }else{ res.redirect('/authenticate'); } };