Javascript Res.render()不渲染
我有一条快速路线,它似乎拒绝呈现一个翡翠模板。当我输入错误的jade模板字符串时,我得到了一个常见的错误,即无法找到呈现到浏览器中的fie 但当我找到合适的人时,什么都不会发生 此外,当我在Javascript Res.render()不渲染,javascript,node.js,express,Javascript,Node.js,Express,我有一条快速路线,它似乎拒绝呈现一个翡翠模板。当我输入错误的jade模板字符串时,我得到了一个常见的错误,即无法找到呈现到浏览器中的fie 但当我找到合适的人时,什么都不会发生 此外,当我在res.render()之后放置res.status(500).send()时,我最终会得到500错误或我选择放入其中的任何其他代码 这是怎么回事 app.post('/stuff/new',函数(req,res){ Stuff.findById(req.body.booking_id,函数(err,Stu
res.render()
之后放置res.status(500).send()
时,我最终会得到500错误或我选择放入其中的任何其他代码
这是怎么回事
app.post('/stuff/new',函数(req,res){
Stuff.findById(req.body.booking_id,函数(err,Stuff){
if(err){console.log(“err”,err)}
其他如有(预订){
Thungs.findById(req.body.user_id,函数(err,thung){
user.stuff.push(请求body.things);
user.save();
});
Thingers.findById(请求主体中心id,函数(err,thinger){
中心。东西。推(要求身体。东西);
center.save();
});
stuff.prop='thing';
保存(函数(错误、结果){
if(err){console.err(“err”,err)}
否则{
res.render(‘预订/谢谢’{
url:req.url,
id:“谢谢”
},函数(err,html){
if(err){console.err(“err”,err)}
否则{
res.send(html);
}
});
res.status(500.send();
}
});
}
})
});代码>您不需要res.send(html)
如果您不想渲染模板,只需从res.render()
中删除回调即可。当res.status(500.send())时也是如此代码>显示为500,因为连接在res.render()
和res.send()
之后不会终止,它们后面的语句将执行,您可以使用返回res.render()
和返回res.send()
然后控件将不会转到res.status(500)。send()
希望它有帮助:)你不需要res.send(html)
如果您不想渲染模板,只需从res.render()
中删除回调即可。当res.status(500.send())时也是如此代码>显示为500,因为连接在res.render()
和res.send()
之后不会终止,它们后面的语句将执行,您可以使用返回res.render()
和返回res.send()
然后控件将不会转到res.status(500)。send()
希望它有帮助:)整个东西.save()
回调是不正确的,因为您永远不会返回res.render()的结果。但是,会执行res.render()
,因为您将回调传递给res.render()
,它不会自动响应请求
呈现视图并将呈现的HTML字符串发送到客户端。可选参数:
- 局部变量,其属性定义视图的局部变量的对象
- 回调,一个回调函数。如果提供,该方法将返回可能的错误和呈现的字符串,但不执行自动响应。当发生错误时,该方法在内部调用next(err)
由于res.render()
函数没有阻塞,因此stuff.save()
回调将继续执行到res.status(500).send()
并响应。最终,您的视图不会被渲染,您的左侧会得到一个500内部服务器错误作为响应
重要的是要注意,在几乎所有的场景中,当您要在响应后停止执行响应时,返回
是一种“最佳实践”。您唯一不想在响应时使用返回
的时候是,如果您需要在之后执行某种类型的清理例程
以下代码在成功时正确返回res.render()
,在发生错误时正确返回res.status(500)
stuff.save(function(err, result){
if (err) {
console.err("err", err)
// An error occurred, stop execution and return 500
return res.status(500).send();
}
// No error occurred, attempt to render the view
// and return the outcome of the rendering to the callback
res.render('booking/thank_you', {
url: req.url,
id: "thank_you"
}, function(err, html){
if (err) {
console.err("ERR", err)
// An error occurred, stop execution and return 500
return res.status(500).send();
}
// Return the HTML of the View
return res.send(html);
});
}
});
整个stuff.save()
回调不正确,因为您从未返回res.render()的结果。但是,会执行res.render()
,因为您将回调传递给res.render()
,它不会自动响应请求
呈现视图并将呈现的HTML字符串发送到客户端。可选参数:
- 局部变量,其属性定义视图的局部变量的对象
- 回调,一个回调函数。如果提供,该方法将返回可能的错误和呈现的字符串,但不执行自动响应。当发生错误时,该方法在内部调用next(err)
由于res.render()
函数没有阻塞,因此stuff.save()
回调将继续执行到res.status(500).send()
并响应。最终,您的视图不会被渲染,您的左侧会得到一个500内部服务器错误作为响应
重要的是要注意,在几乎所有的场景中,当您要在响应后停止执行响应时,返回
是一种“最佳实践”。您唯一不想在响应时使用返回
的时候是,如果您需要在之后执行某种类型的清理例程
以下代码在成功时正确返回res.render()
,在发生错误时正确返回res.status(500)
stuff.save(function(err, result){
if (err) {
console.err("err", err)
// An error occurred, stop execution and return 500
return res.status(500).send();
}
// No error occurred, attempt to render the view
// and return the outcome of the rendering to the callback
res.render('booking/thank_you', {
url: req.url,
id: "thank_you"
}, function(err, html){
if (err) {
console.err("ERR", err)
// An error occurred, stop execution and return 500
return res.status(500).send();
}
// Return the HTML of the View
return res.send(html);
});
}
});
这可能是因为我使用$.ajax调用此路由吗?您是否将express设置为使用jade?您是否可以检查chrome开发工具以检查服务器的响应?(首先移除res.status(500)…
)。另外,您的控制台中是否显示错误?这可能是重复的,因为我正在使用$.ajax调用此路由?您是否将express设置为使用jade?您是否可以检查chrome开发工具以进行检查