Javascript 当抛出错误时,将响应重定向到HTTP 500错误处理程序

Javascript 当抛出错误时,将响应重定向到HTTP 500错误处理程序,javascript,node.js,express,Javascript,Node.js,Express,如果某个底层组件抛出错误,我如何通知express.js堆栈?我使用的是一个底层数据访问框架,它偶尔会抛出特定的错误(例如,在数据库中找不到记录时) express.js是否提供了一种直接跳转到500错误处理程序并将响应重定向到相应页面的方法?不幸的是,我看不到使用标准express.js方式的直接方法(使用next中间件处理程序),除非我使用try…catch everywhere,这也是一点开销通常不会重定向到500页。您要做的是让异常传播,如果抛出异常,node.js将为您执行500次 我

如果某个底层组件抛出错误,我如何通知express.js堆栈?我使用的是一个底层数据访问框架,它偶尔会抛出特定的错误(例如,在数据库中找不到记录时)


express.js是否提供了一种直接跳转到500错误处理程序并将响应重定向到相应页面的方法?不幸的是,我看不到使用标准express.js方式的直接方法(使用
next
中间件处理程序),除非我使用try…catch everywhere,这也是一点开销

通常不会重定向到500页。您要做的是让异常传播,如果抛出异常,node.js将为您执行500次

我遵循一些相关的规则。也许你会发现它们很有用:

  • 不要在异步代码中使用try/catch(比如node.js)。错误通常通过提供的回调的第一个参数传播
  • 如果我需要向用户返回一个错误,我可以使用
    res.send('error',500)来完成

    • 对于像我这样仍在寻找答案的人来说:

      1-使用快速默认errorHandler中间件

      app.use(express.errorHandler());
      

      2-提供您自己的错误处理中间件:

      app.use(function (error, req, res, next) {
                  res.status(500);
                  res.render("500.jade", {});
              });
      
      理想情况下,您希望在
      DEV
      上使用第一个选项,在
      PROD
      上使用第二个选项

      // development only
      if ('development' == app.get('env')) {
        app.use(express.errorHandler());
      }
      
      app.use((function (error, req, res, next) {
        res.status(500);
        res.render("500.jade", {});
      });
      

      注意:错误处理程序应该策略性地放在app.router的下面

      res.send(500,{error:'something blowered'})怎么样?或者我的问题有误吗?如果我的数据访问组件抛出错误,它将超出当前express router方法的范围。在最简单的情况下,它会导致应用程序的节点崩溃,除非我使用try…catch everywhere我不懂一件事。如果某个组件实际上抛出了异常(抛出ne错误(…),那么在我的路由器处理程序方法中几乎没有什么可以做的,来转发该异常,除非我使用try…catch。否则,异常只会使node.js中的appIn节点崩溃,只有少数异常(如验证程序模块),如果出现异常,则应让应用程序崩溃,并修复导致该异常的错误。这是因为大多数node.js模块都不会抛出异常,因此node.js中的异常通常表示代码中存在错误。因此这更像是一种约定,对吧。如果要传播异常,只需使用“下一个”处理程序(如果有)传递它。如果你想指出一个严重的错误,你就抛出它。这是正确的吗?这似乎与其他环境不同,例如Java,您可以使用它。是的,不一样。Java无论如何都会滥用异常,在任何事情上都使用它们。:)谢谢那么,我想,没有通用的方法可以很好地处理TypeError错误,比如当试图操作未定义的变量时?我总是需要在任何地方进行手动检查。