【问题标题】:How to handle Node js app errors to prevent crashing如何处理 Node js 应用程序错误以防止崩溃
【发布时间】:2015-03-01 16:58:11
【问题描述】:

我是 node 的新手,我会称之为 real 服务器端编程(与 PHP 相比)。我正在使用 MongoDB、Mongoose 和一个简单的 mongoose 用户插件设置一个用户数据库,该插件带有一个模式和密码供使用。您可以像这样为您的字段向 Mongoose 添加验证

schema.path('email').validate(function (email) {
    if (this.skipValidation) return true
    return email.trim().length
  }, 'Please provide a valid email')

(这不是我的代码)。我注意到,当我传递一封无效或空白的电子邮件时,.trim() 失败并且整个服务器崩溃了。这对我来说非常令人担忧,因为这样的事情不会发生在你的好 WAMP 堆栈中。如果您有错误,99.9% 的时间只是浏览器受到影响。

现在我正在深入研究低级编程,我是否必须对简单函数的每个传入变量感到偏执?我应该遵循一个久经考验的错误系统吗?

【问题讨论】:

    标签: node.js


    【解决方案1】:

    在使用变量前检查是否为 !null 例如:

    if(!email) {
        return false;
    }
    

    如果您想永远运行您的应用程序,请使用 PM2。 如果你对永远跑步感兴趣,请阅读这篇有趣的帖子http://devo.ps/blog/goodbye-node-forever-hello-pm2/

    【讨论】:

      【解决方案2】:

      您可以考虑使用forever 来保持您的node.js 程序运行。即使它崩溃了,它也会自动重启并且错误也会被记录下来。

      注意:虽然您实际上可以捕获所有异常以防止 node.js 崩溃,但不建议这样做。

      【讨论】:

        【解决方案3】:

        我们的策略之一是利用 Node.js 域来处理错误 - http://nodejs.org/api/domain.html

        【讨论】:

          【解决方案4】:

          您应该设置一个错误日志记录节点模块,如Winston,一旦配置会产生有用的错误/异常。

          查看this answer,了解如何在您的节点实现中捕获错误,虽然特定于expressjs,但相关。

          一旦捕获异常,它就可以防止意外崩溃。

          【讨论】:

            猜你喜欢
            • 2014-05-26
            • 2015-12-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-11-09
            • 2019-02-03
            相关资源
            最近更新 更多