`

nodejs process uncaughtException

 
阅读更多
用过Node一段时间之后,发现那些在事件主循环里碰到的异常会导致Node进程退出。在许多应用场景下,特别是对那些希望永不当机的服务器程序来说,这都是不接受的。uncaughtException事件会提供一个极其暴力的方法来捕获这些异常。它确实是最后一道防线了,但对解决此问题上非常有效果。
示例1
var http = require('http');

var server = http.createServer(function(req,res){
    res.writeHead(200,{});
    res.end('response');
    setTimeout(function(){
        console.log('This will still run.');
    },2000);
    method(); //由于method()未定义,会将程序进程退出。
    console.log('response end');
});

server.listen(10086);

process.on('uncaughtException', function (err) {
    console.log('Caught Exception:' + err);//直接捕获method()未定义函数,Node进程未被退出。
});


示例2
var http = require('http');

var server = http.createServer(function(req,res){
    res.writeHead(200,{});
    res.end('response');
    setTimeout(function(){
        method(); //由于method()未定义,会将程序进程退出。
        console.log('This will still run.');
    },2000);
//    method();
});

server.listen(10086);

process.on('uncaughtException', function (err) {
    console.log('Caught Exception:' + err); //直接捕获method()未定义函数,Node进程未被退出。
});


上述的例子,我们为uncaughtException创建了一个事件监听器。然后将异常描述做一个简单的标准输出,由于method()函数未定义,所以它捕获了一个不存在的函数触发的事件,所以Node程序程序不会退出,但是标准的执行流程会被打断。console.log('response end')这段代码将不会被执行,而setTimeout()函数里的程序将在2秒后执行,因为它在异常捕获时,已经加入事件队列中。
分享到:
评论

相关推荐

    详解nodejs中的process进程

    如示例所示,当发生未捕获的异常时,`process.on('uncaughtException', callback)`可以让开发者在控制台记录错误或采取其他恢复措施,保持程序的稳定运行。然而,这种方法并不鼓励频繁使用,因为它可能导致数据不...

    express异步函数异常捕获示例详解

    开始能想到的肯定是try/catch了,但是也想过能否使用nodejs提供的uncaughtException事件,在全局捕获异常,例如下面的代码: process.on(uncaughtException, (err) => console.log(uncaught Exception

    nodejs手册中文版

    - **事件:'uncaughtException'**:未捕获异常时触发。 - **信号事件**:当操作系统向进程发送信号时触发。 - **process.stdout**:标准输出流。 - **process.stderr**:标准错误输出流。 - **process.stdin**:标准...

    Node.js-管理你NodeJS进程的生命周期

    全局范围内的未捕获异常会触发`uncaughtException`,但应避免依赖此事件来处理错误,因为它可能导致不稳定的系统状态。最佳实践是尽早捕获错误并在适当的地方处理。 六、进程退出与清理工作 当进程准备退出时,...

    nodejs手册中文版.pdf

    - process.on('uncaughtException', callback):监听未捕获异常事件。 5. util工具模块 Node.js的util模块提供了很多实用的方法和属性,方便开发者进行操作。 - util.debug(string):打印调试信息。 - util.log...

    nodejs中文手册

    9. **错误处理**:在Node.js中,错误通常是通过异常来处理的,可以使用try...catch语句捕获异常,或者监听全局的'uncaughtException'事件。良好的错误处理是保证程序稳定性的关键。 10. **异步编程**:Promise、...

    Nodejs-exception-event-and-logger-demo:使用Winston插件的Node.js处理异常事件和日志记录的演示存储库

    说明 这个文件记录了 nodejs 中常见的进程异常事件处理, 以及日志记录的实现 ...'unCaughtException' 'unhandledRejection' nodejs 日志记录 demo winston 的使用 winston-daily-rotate-file 的使用

    Node出错导致运行崩溃的解决方案.docx

    process.on('uncaughtException', function (err) { // 打印出错误 console.log(err); // 打印出错误的调用栈方便调试 console.log(err.stack); }); ``` 这种方法可以有效地防止 Node.js 进程的退出,但是一些...

    nodejs框架

    另外,全局的`process.on('uncaughtException')`监听器可以捕获未被处理的异常。 了解并掌握以上知识点,将使你能够有效地利用Node.js开发高效、可扩展的网络应用。在实际项目中,可以通过阅读官方文档、参加在线...

    nodejsAPI中文版

    error事件、uncaughtException事件允许开发者处理未捕获的异常错误。 Node.js还提供了一些实用工具,如util模块,它包含了一系列用于Node.js内部的方法和函数。util.debuglog可以用于创建一个简单的调试函数,...

    nodejs基础学习代码

    Node.js 提供了全局的 `process` 对象,其中的 `uncaughtException` 事件可以监听未被捕获的异常。此外,`try-catch` 通常用于异步操作,以确保代码的健壮性。在学习文件中,可能会看到如何使用这些机制来优雅地处理...

    解析Node.js异常处理中domain模块的使用方法

    NodeJS 提供了 domain 模块,可以简化异步代码的异常处理。...process.on('uncaughtException', function (err) { console.log('Error: %s', err.message); }); setTimeout(function (fn) { fn(); }); Error: und

    Nodejs cluster报错Error [ERR_IPC_CHANNEL_CLOSED]: channel closed

    at ChildProcess.target.send (internal/child_process.js:578:16) at Worker.send (internal/cluster/worker.js:54:28) 经排查这个问题原因是子进程占用内存太多,触发了Linux内核的OOM Killer机制

    NodeJS v0.12api文档pdf(英文版)

    - **`'uncaughtException'`**:当一个未捕获的异常发生时触发。 - **信号事件**:处理操作系统发送的信号。 - **标准输入输出流**: - **`process.stdout`**:标准输出流。 - **`process.stderr`**:标准错误输出...

    NodeJS手册中文版.pdf (免积分)

    - **事件:'uncaughtException'**:当抛出未捕获异常时触发。 - **信号事件**:处理各种信号(如 SIGINT、SIGTERM)。 - **标准输入/输出流**:`process.stdin`、`process.stdout` 和 `process.stderr`。 - **环境...

Global site tag (gtag.js) - Google Analytics