从 Node.JS 中未捕获的异常中恢复 [英] Recover from Uncaught Exception in Node.JS
问题描述
好的,所以我有问题.如果在处理 HTTP 请求时发生未捕获的异常,我将没有机会调用 http.ServerResponse 对象上的 end() 方法.因此,服务器永远挂起,永远不会满足请求.
OK, so I have a problem. If an uncaught exception occurs while I am handling an HTTP request, I have no opportunity to call the end() method on the http.ServerResponse object. Therefore, the server hangs forever and never fulfills the request.
这是一个例子:
var express = require('express');
var app = express.createServer();
var reqNum = 0;
app.get('/favicon.ico', function(req, res) {res.send(404);});
app.get('*', function(req, res, next) {
console.log("Request #", ++reqNum, ":", req.url);
next();
});
app.get('/error', function(req, res, next) {
throw new Error("Problem occurred");
});
app.get('/hang', function(req, res, next) {
console.log("In /hang route");
setTimeout(function() {
console.log("In /hang callback");
if(reqNum >= 3)
throw new Error("Problem occurred");
res.send("It worked!");
}, 2000);
});
process.on('uncaughtException', function(err) {
console.log("Uncaught exception!", err);
});
app.listen(8080);
如果访问/error,会发生异常,但会被捕获.用户收到错误消息 - 没问题.但是,如果我访问/hang,服务器最终将抛出一个未捕获的异常并永远挂起.任何对/hang 的后续请求都将挂起.
If you visit /error, an exception occurs, but it is caught. The user receives an error message - no problem. If I visit /hang, though, the server will eventually throw an uncaught exception and hang forever. Any subsequent requests for /hang will hang.
这很糟糕.有关如何解决此问题的任何建议?
This sucks. Any advice for how to fix this issue?
推荐答案
当发生未捕获的异常时,您处于不干净的状态.让进程终止并重新启动它,没有其他办法可以安全地将其恢复到已知良好的状态.使用 forever
,它会在它终止后立即重新启动您的进程.
When an uncaught exception occurs, you're in an unclean state. Let the process die and restart it, there's nothing else you can do to safely bring it back to a known-good state. Use forever
, it'll restart your process as soon as it dies.
这篇关于从 Node.JS 中未捕获的异常中恢复的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!