Node.js 如何仅渲染一个视图?
我正在使用Node.JS和Express web framework,但res.render()有问题 我有这个功能:Node.js 如何仅渲染一个视图?,node.js,express,Node.js,Express,我正在使用Node.JS和Express web framework,但res.render()有问题 我有这个功能: exports.init = function(){ return function(req, res, next) { /* FORM CONTACT */ if (req.body.contact){ model.validateContact(funct
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(我指的是内部函数(validateCOntact和sendContact)中的res.render),所以最后一个res.render('contacts')
将始终执行
如果我呈现一个页面,为什么脚本会继续它的过程?我怎么可能多次执行res.render()
谢谢在调用
res.render()
后返回
if (err){
res.render('contacts', {'error': err})
return
}
每次执行res.redirect或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');
}
});
}
});
} else {
/* CONTACT */
res.render('contacts');
console.log('after');
}
}
}
我无法在内部函数中进行返回,如果我这样做,我将从那里“退出”,而不是从主函数(init函数)。@Dali对,没有注意到这一点,尽管您只需要返回两次。我尝试过,如果在内部函数(validateContact或sendContact)中的res.render(或res.redirect)上使用return,它将不起作用我得到“错误:发送后不能使用可变头API”。因为最后的res.render将始终执行。我建议在获得错误后返回return
,否则主代码将始终包装在else
子句中。如果只有1-2个else if,则返回更有用。