【发布时间】:2013-03-08 15:55:25
【问题描述】:
我在 Express 中使用自定义错误页面,如 here 所述。
但是当我这样做时,我只看到错误消息。我想获取与默认 Express 错误处理程序(堆栈跟踪等)中显示的相同信息,以便我可以:
- 将其记录到控制台(如果我可以为此保留默认设置,我会很高兴)。
- 在错误页面上显示,但仅限本地主机。
我该怎么做?
【问题讨论】:
我在 Express 中使用自定义错误页面,如 here 所述。
但是当我这样做时,我只看到错误消息。我想获取与默认 Express 错误处理程序(堆栈跟踪等)中显示的相同信息,以便我可以:
我该怎么做?
【问题讨论】:
只需使用提供给中间件的错误
// Handle 500
app.use(function(error, req, res, next) {
console.error(error);
if (ISLOCALHOST()) {
res.json(error, 500);
} else {
res.send('500: Internal Server Error', 500);
}
});
【讨论】:
new Error() 中您可能会将字符串传递给 next() 您应该像 next(new Error("this thing failed"); 那样做
new Error() try (function bob () { console.log(new Error('test').stack); })()
这是@generalhenry 回答的修改版本。您可以访问堆栈跟踪
在err.stack 中,这样你就可以将它传递到你的“500”视图上,并在它上面做一些花哨的 css 样式。
app.use(function(err, req, res, next) {
if (err instanceof NotFound) {
res.render('errors/404');
} else {
res.render('errors/500', {error: err, stack: err.stack});
}
});
function NotFound() {
this.name = "NotFound";
Error.call(this, msg);
Error.captureStackTrace(this, arguments.callee);
}
// below all route handlers
// If all fails, hit em with the 404
app.all('*', function(req, res){
throw new NotFound;
});
【讨论】: