Exception 处理node.js异常
我们希望将node.js用于一个高度动态的项目。传统上,我们使用Java,当遇到未经处理的异常时,会抛出错误,但web应用程序(通常)会继续服务于其他请求 但是,对于node,相同的场景会导致进程终止。如果我们将这个系统部署到生产环境中,而整个服务器由于一个未处理的异常而崩溃,我不愿意去想会发生什么 我想知道是否有教程/工具/等帮助处理异常问题。例如,有没有一种方法可以添加一个全局的最后手段类型异常?如前所述,您会发现Exception 处理node.js异常,exception,node.js,Exception,Node.js,我们希望将node.js用于一个高度动态的项目。传统上,我们使用Java,当遇到未经处理的异常时,会抛出错误,但web应用程序(通常)会继续服务于其他请求 但是,对于node,相同的场景会导致进程终止。如果我们将这个系统部署到生产环境中,而整个服务器由于一个未处理的异常而崩溃,我不愿意去想会发生什么 我想知道是否有教程/工具/等帮助处理异常问题。例如,有没有一种方法可以添加一个全局的最后手段类型异常?如前所述,您会发现错误。堆栈提供了一个更完整的错误消息,例如导致错误的行号: process.o
错误。堆栈提供了一个更完整的错误消息,例如导致错误的行号:
process.on('uncaughtException', function (err){
console.error(err)
})
process.on('uncaughtException', function (error) {
console.log(error.stack);
});
你应使用:
响应抛出的错误最安全的方法是关闭进程。当然,在一个普通的web服务器中,可能有许多连接处于打开状态,而突然关闭这些连接是不合理的,因为错误是由其他人触发的
更好的方法是向触发错误的请求发送错误响应,同时让其他请求在正常时间内完成,并停止侦听该工作进程中的新请求
链接页面有示例代码,我在下面稍微简化了一下。它的工作原理如上所述。您可以调用服务器,使其在退出时自动重新启动,或者
var server = require('http').createServer(function(req, res) {
var d = domain.create();
d.on('error', function(er) {
console.error('error', er.stack);
try {
// make sure we close down within 30 seconds
var killtimer = setTimeout(function() {
process.exit(1);
}, 30000);
// But don't keep the process open just for that!
killtimer.unref();
// stop taking new requests.
server.close();
// try to send an error to the request that triggered the problem
res.statusCode = 500;
res.setHeader('content-type', 'text/plain');
res.end('Oops, there was a problem!\n');
} catch (er2) {
// oh well, not much we can do at this point.
console.error('Error sending 500!', er2.stack);
}
});
// Because req and res were created before this domain existed,
// we need to explicitly add them.
d.add(req);
d.add(res);
// Now run the handler function in the domain.
d.run(function() {
// your application logic goes here
handleRequest(req, res);
});
});