【问题标题】:How do I turn off Node.js Express (ejs template engine) errors for production?如何为生产关闭 Node.js Express(ejs 模板引擎)错误?
【发布时间】:2014-10-10 19:38:40
【问题描述】:
当我在开发服务器上出现错误时,Express 会发送回溯作为响应。
但是,这对生产不利。我不希望任何人看到我的引用。
如何关闭此功能?
注意:我使用 EJS 作为模板引擎 - 这可能是原因,而不是表达。例如,当我在 ejs 模板中有未定义的变量时,ejs 会呈现回溯并在白页上显示给用户。
【问题讨论】:
标签:
node.js
express
error-handling
【解决方案1】:
所以错误可能来自 express 或 ejs。在以下情况下:
- 表达错误:使用自定义错误处理来覆盖默认行为。只是不要发回错误。在documentation 页面上阅读它。或者您可以使用已经存在的中间件,例如 Leonid 所说的 errorhandler 来覆盖它。
-
模板错误:由于jade/ejs等。再次处理错误而不是默认行为,即发送给客户端。使用回调并检查错误。如果不显示,则显示错误页面。
res.render(your_template, {}, function(err, html) {
if(err) {
res.redirect('/error');
} else {
res.send(html);
}
});
【解决方案2】:
最新版 Express 使用智能默认错误处理程序。
在development 模式下,它会将完整的堆栈跟踪发送回浏览器,而在production 模式下,它只发送500 Internal Server Error。
要利用它,您应该在运行应用程序之前设置正确的NODE_ENV。
例如,在生产模式下运行您的应用:
NODE_ENV=production node application.js
但如果您不喜欢这种默认行为,您可以定义自己的错误处理程序:
app.use(function(err, req, res, next){
console.error(err);
res.status(500);
res.render('error');
});
请注意,错误处理程序必须是链中的最后一个中间件,因此它应该定义在 application.js 文件的底部。
如果您需要更多信息,请参阅: