用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()
返回false
或null
或其他值来指示中断。 或者检查响应的状态(例如,检查res._headerSent === true
或res.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') }); });