我想知道打破程序流程并重定向到某条路径的正确方法是什么。
类似于标题重定向,但使用路由名称而不是完整的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')
});
});
正常的render
不会是我想要的,因为我不想再次获取渲染视图所需的所有变量,我想要我想要重定向的路线处理它。
我在考虑使用writeHead
,但这需要整个网址,而不仅仅是路由网址。
有任何想法或建议吗?
答案 0 :(得分:1)
您可以从false
返回null
或getUser()
或其他值来表示休息。或者检查回复的状态(例如,检查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')
});
});