2013-03-14 59 views
1

我正在通过Express.js中间件上的集成测试来驱动行为。我遇到了一个有趣的情况,即应用程序后面的行为是不可预测的(不是由我来决定)。在Express.js中重定向后调用下一个中间件

作为简化实例:

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,因为它住内部函数和条件以外。我不确定Express如何处理nextres.redirect的中间件/路由调用,如果它们恰好发生在彼此之前或之后,如上所示。

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

+0

你想要做什么? 'res.redirect('/ error')'和'next()'可以在同一个请求中调用,从而搞乱了整个控制流。 – 2013-03-14 06:16:08

+1

如果我尝试使用这两种方法,我得到'发送错误后无法设置标头'错误。 – robertklep 2013-03-14 06:17:45

+0

@JonathanOng我试图通过测试来揭示当两个函数被允许在同一请求中调用时应该发生的任何破坏。 – jneander 2013-03-14 14:39:50

回答

3

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

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