在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是如何将中间件/路由调用处理为next
或res.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'); } };