用express.js打破程序stream程

我想知道怎样才能打破程序的stream程并redirect到某个path。

类似于标题redirect,但使用路由名称而不是完整的URL。

这在PHP框架中很常见,function也很强大,而且我还没有find使用express.js的方法。

想象一下这个场景:

function getUser() { //... //getting user.. //Here I would like to break the flow of the program if (error) { res.redirect('add'); } //If there was no error we keep the normal flow //... } router.get('/add', function (req, res, next) { var user = getUser(); var date = //whatever var type = //whatever var event = createEvent(user, date, type); res.render('add', { date: date, type: type, whatever: whatever, csrfToken: req.csrfToken(), message: req.flash('error') }); }); 

一个正常的render不会是我想要的,因为我不想再得到渲染视图所需的所有variables,我想要redirect的路线来处理它。

我正在考虑使用writeHead ,但这将需要整个URL,而不仅仅是路由URL。

任何想法或build议?

您可以从getUser()返回falsenull或其他值来指示中断。 或者检查响应的状态(例如,检查res._headerSent === trueres.finished === true )。

另一种可能性可能是考虑使getUser()成为中间件函数。 例:

 function getUser(req, res, next) { // ... if (error) return res.redirect('add'); // If there was no error we keep the normal flow // ... // you would add user data to `req` here instead of returning it req.user = ... next(); } router.get('/add', getUser, function(req, res, next) { var user = req.user; var date = //whatever var type = //whatever var event = createEvent(user, date, type); res.render('add', { date: date, type: type, whatever: whatever, csrfToken: req.csrfToken(), message: req.flash('error') }); });