我的应用程序不时遇到错误,导致整个事情崩溃。然后我必须登录服务器并每次重新启动它。
在网上搜索了一段时间后,我发现domains
是Node中处理错误处理的好方法。在进一步挖掘之后,我发现domains
现已被弃用(不知道为什么?)。
然后我在网上找到了一些答案,使用以下代码可能是有益的:
process.on('uncaughtException', function(err) {
console.log(err);
});
虽然,这只是针对Node,而不是Express。因此,如果代码位于带有Express的http请求的中间,则不会向浏览器返回任何内容,因此将其置于不稳定状态(这也可能会占用服务器上的内存)。
在NodeJS / ExpressJS中,在保持服务器运行的同时处理错误的最佳方法是什么?
答案 0 :(得分:1)
您可以在server.js
或其等价物的末尾添加错误处理程序。
它可以是
app.use(function (err, req, res, next) {
if (! err) {
return next();
}
res.status(500);
res.render('path/to/500/page'); // or send out json, what ever you need.
});
为了发现错误,我首选的方法是try catch
。
将所有异步方法包装在一个承诺中,或者使用蓝鸟来promisify
。
在您的路线中,使用co-express
和yield
承诺。
示例强>:
function mySexyMethod() {
return new Promise(function (resolve, reject) {
someAsyncMethod(params, function (err, data) {
if (err) {
return reject(err);
}
resolve(data);
})
});
}
/// Express router
const wrap = require('co-express');
router.verb('some-route', wrap(function* (req, res, next) {
let val;
try {
val = yield mySexyMethod();
} catch (e) {
return next(e);
}
});
如果出现错误,将调用server.js
中的错误处理程序。
至于确保节点进程在服务器上永久运行,请使用forever