sailsjs 中的全局错误处理
Globally Error Handling in sailsjs
我一直在做我的帆项目,这是一个你能做到的怪物,它是一个真正的大项目,由模型、服务、控制器等组成。
现在突然出现应用启动触发错误的情况
Can't set headers after they are sent
。
我对其进行了研发,后来发现这是因为我的代码中存在逻辑错误,然后突然将错误更改为 Undefined is not a functino
由于代码中的不同错误,应用程序开始在不同点崩溃。
所以我开始认为 sailsjs 中必须有某种方法可以防止应用程序崩溃,这样我的应用程序的每个用户都不会丢失他们的会话,并且我可以记录每种类型的错误并防止应用程序崩溃崩溃
所以我再次对其进行了研发,发现我的 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 在服务器崩溃时自动重启您的服务器。对于您的会话问题,您可以通过编辑 sails 项目的 config/session.js
文件将会话存储到 redis 或 mongoDB 中,就像这个会话在 sails 重新启动时不会丢失。
您可以使用 try/catch
或节点 domains 来处理某些显式代码的错误,但全局处理错误一点也不安全,也不是一个好的做法。
查看 this question/answer 以获取有关 node.js
中错误处理的更多信息
我一直在做我的帆项目,这是一个你能做到的怪物,它是一个真正的大项目,由模型、服务、控制器等组成。
现在突然出现应用启动触发错误的情况
Can't set headers after they are sent
。
我对其进行了研发,后来发现这是因为我的代码中存在逻辑错误,然后突然将错误更改为 Undefined is not a functino
由于代码中的不同错误,应用程序开始在不同点崩溃。
所以我开始认为 sailsjs 中必须有某种方法可以防止应用程序崩溃,这样我的应用程序的每个用户都不会丢失他们的会话,并且我可以记录每种类型的错误并防止应用程序崩溃崩溃
所以我再次对其进行了研发,发现我的 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 在服务器崩溃时自动重启您的服务器。对于您的会话问题,您可以通过编辑 sails 项目的 config/session.js
文件将会话存储到 redis 或 mongoDB 中,就像这个会话在 sails 重新启动时不会丢失。
您可以使用 try/catch
或节点 domains 来处理某些显式代码的错误,但全局处理错误一点也不安全,也不是一个好的做法。
查看 this question/answer 以获取有关 node.js
中错误处理的更多信息