从 Node.JS 中未捕获的异常中恢复 [英] Recover from Uncaught Exception in Node.JS

查看:32
本文介绍了从 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆