我想知道打破程序流程并重定向到某个路由的正确方法是什么。
类似于 header 重定向,但使用路由名称而不是完整的 URL。
这相当common to be found in PHP frameworks而且相当强大,但我还没有找到使用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')
});
});
正常的渲染不会是我想要的,因为我不想再次获取渲染 View 所需的所有变量,我希望我想要重定向的路由来处理它。
我正在考虑使用 writeHead
,但这需要整个 URL,而不仅仅是路由 URL。
有什么想法或建议吗?
最佳答案
您可以从 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')
});
});
关于javascript - 使用express.js 打破程序流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26909540/