express - sailsjs中的全局错误处理

标签 express error-handling sails.js middleware

我一直在进行我的Sails项目,这是一个您可以做到的庞然大物,这是一个包含模型,服务, Controller 等的真正大项目。

现在突然出现了应用程序启动触发错误的情况Can't set headers after they are sent

我对此进行了研发,后来发现这是由于我的代码中的逻辑错误导致的,然后突然将错误更改为Undefined is not a functino
并且由于代码中的错误,应用程序在不同点开始崩溃。

所以我开始认为sailsjs中必须有某种方法可以防止应用程序崩溃,这样我的应用程序的每个用户都不应失去其 session ,并且我可以记录每种类型的错误并防止应用程序崩溃

因此,我再次对其进行了研发,发现下面的代码要写在config/express.js中,该代码类似于。
process.on('uncaughtException', function (err) { console.log(err); })
在进行了如此多的研发并阅读了有关SO的不同博客和答案之后,现在我想到了一些问题。

1)是在中间使用此功能的好方法吗?

2)是否会使我的应用程序不稳定?

3)如果不是,那么我应该怎么做才能处理应用程序中的每种类型的错误,以使应用程序不会崩溃。

我正在使用sailsjs版本0.9.13,我的package.json如下

{
  "name": "",
  "private": true,
  "version": "0.0.0",
  "description": "a Sails application",
  "dependencies": {
    "MD5": "1.2.1",
    "async": "^0.9.0",
    "autocomplete": "0.0.1",
    "aws-sdk": "^2.1.39",
    "bitpay-node": "0.0.4",
    "convert-json": "^0.4.0",
    "cron": "^1.0.5",
    "download": "^0.1.18",
    "ejs": "0.8.4",
    "emailjs": "^0.3.8",
    "express": "^4.9.8",
    "feed": "0.2.6",
    "fs": "0.0.2",
    "grunt": "0.4.1",
    "ipv6": "3.1.1",
    "js-combinatorics": "^0.4.0",
    "mkdirp": "^0.5.0",
    "moment": "^2.9.0",
    "mysql": "2.2.0",
    "nodemailer": "0.6.3",
    "optimist": "0.3.4",
    "pagination": "^0.4.3",
    "payment-paypal-payflowpro": "0.0.4",
    "paynode": "^0.3.6",
    "paypal-rest-sdk": "^1.0.0",
    "pdfkit": "0.6.2",
    "request": "2.34.0",
    "request-json": "0.4.10",
    "sails": "0.9.13",
    "sails-disk": "~0.9.0",
    "sequelize": "1.7.3",
    "url": "^0.10.3",
    "wkhtmltopdf": "^0.1.4",
    "xlsjs": "^0.7.1",
    "xml2js": "^0.4.9"
  },
  "scripts": {
    "start": "node app.js",
    "debug": "node debug app.js"
  },
  "main": "app.js",
  "repository": "",
  "author": "",
  "license": ""
}

我还检查了http://expressjs.com/guide/error-handling.html上express.js的错误处理,但是我不确定如何在sailsjs中使用它。

请指导我哪种方法最适合处理sailsjs中的错误。
谢谢

最佳答案

最好的办法是修复您的错误,无论您使用什么全局方式处理错误(uncaughtException),都会使您的应用程序不稳定。

Sails不提供任何错误处理程序,但该错误处理程序是与express或node.js一起提供的,但是像文档中所述:http://sailsjs.org/documentation/concepts/deployment#/deploy

您可以使用forever.js在服务器崩溃时自动重新启动服务器。对于 session 问题,您可以通过编辑sails项目的config/session.js文件将 session 存储到redis或mongoDB中,就像帆重新启动时不会丢失这些 session 一样。

您可以使用try/catch或node domains来处理某些显式代码上的错误,但在全局范围内处理错误,这一点都不安全,也不是一种好习惯。

this question/answer中查找有关node.js中错误处理的更多信息

关于express - sailsjs中的全局错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31854369/

相关文章:

javascript - 如何从NodeJS中的静态页面访问index.js

javascript - 在Sequelize中使用classMethods有没有办法更简洁?

c# - 处理错误 "WebDev.WebServer.Exe has stopped working"

java - 如何在 Spring MVC 中创建自定义响应处理程序?

javascript - 我的 sails.js 服务将 “undefined” 返回到调用 Controller 操作

javascript - 服务器渲染错误

node.js - 如何处理 io.use 中间件捕获客户端错误?

java - 如何知道故障原因?

mongodb - 模型中的 Sails.js expireAfterSeconds 选项

javascript - 如何在 SAILS JS 的 API REST 中使用方法过滤器搜索?