【问题标题】: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。在以下情况下:

  1. 表达错误:使用自定义错误处理来覆盖默认行为。只是不要发回错误。在documentation 页面上阅读它。或者您可以使用已经存在的中间件,例如 Leonid 所说的 errorhandler 来覆盖它。
  2. 模板错误:由于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 文件的底部。


    如果您需要更多信息,请参阅:

    【讨论】:

      猜你喜欢
      • 2015-12-16
      • 1970-01-01
      • 2010-12-19
      • 1970-01-01
      • 2018-08-02
      • 2017-02-10
      • 1970-01-01
      • 2020-12-24
      • 1970-01-01
      相关资源
      最近更新 更多