Node.js 在Express中的自定义错误处理程序中获取堆栈跟踪?

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

如前所述,我在Express中使用自定义错误页

但当我这样做时,我只看到错误消息。我希望获得默认Express错误处理程序(stacktrace等)中显示的相同信息,以便:

  • 将其记录到控制台(如果我可以保留默认设置,我会很高兴)
  • 在错误页面上显示,但仅针对本地主机

  • 如何做到这一点?

    只需使用提供给中间件的错误即可

      // 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()。