我正在使用Node.JS和Express web框架,我有一个res.render()的问题
我有这个功能:
exports.init = function(){
return function(req, res, next) {
/* FORM CONTACT */
if (req.body.contact){
model.validateContact(function(e){
if (err) res.render('contacts', {'error': err})
else {
model.sendContact(function(err){
if (err)
res.render('contacts', {'error': err})
else
res.redirect('/success')
})
}
})
}
/* CONTACT */
res.render('contacts')
console.log('after')
}
}
这里有一个问题,因为init函数中不存在res.render(我引用内部函数内部的res.render(validateCOntact和sendContact),因此将始终执行最后一个res.render('contacts')
。
如果我渲染页面,为什么脚本会继续其进程?我怎么可能做res.render()多次?
谢谢
答案 0 :(得分:1)
试试这个:
exports.init = function() {
return function(req, res, next) {
/* FORM CONTACT */
if (req.body.contact){
model.validateContact(function(e) {
if (err) {
res.render('contacts', {'error': err});
} else {
model.sendContact(function(err) {
if (err) {
res.render('contacts', {'error': err});
} else {
res.redirect('/success');
}
});
}
});
} else {
/* CONTACT */
res.render('contacts');
console.log('after');
}
}
}
答案 1 :(得分:0)
致电return
后,只需res.render()
。例如:
if (err){
res.render('contacts', {'error': err})
return
}
答案 2 :(得分:0)
每次您执行 res.redirect 或 res.render 时,您都应该返回,因为如果您不这样做,您将获得“之后无法发送标头” ..“错误,因为你将渲染另一个视图。