Node.js 在Express中的自定义错误处理程序中获取堆栈跟踪?
如前所述,我在Express中使用自定义错误页 但当我这样做时,我只看到错误消息。我希望获得默认Express错误处理程序(stacktrace等)中显示的相同信息,以便:Node.js 在Express中的自定义错误处理程序中获取堆栈跟踪?,node.js,express,Node.js,Express,如前所述,我在Express中使用自定义错误页 但当我这样做时,我只看到错误消息。我希望获得默认Express错误处理程序(stacktrace等)中显示的相同信息,以便: 将其记录到控制台(如果我可以保留默认设置,我会很高兴) 在错误页面上显示,但仅针对本地主机 如何做到这一点?只需使用提供给中间件的错误即可 // Handle 500 app.use(function(error, req, res, next) { console.error(error); i
如何做到这一点?只需使用提供给中间件的错误即可
// 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);
}
});
这是@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;
});
这不会显示堆栈跟踪,只显示顶层错误消息。请尝试将其包装为
new error()
您可能正在将字符串传递到next()
您应该像next(new error(“this failed”);
我没有“抛出”任何东西—如果我将操作指向错误的视图(例如),我通常会得到完整的堆栈跟踪。有了这个,只有顶层消息。堆栈跟踪不是来自抛出,而是来自newerror()
try(函数bob(){console.log(newerror('test').stack);})(
,但我不会调用newerror()。