zoukankan      html  css  js  c++  java
  • nodejs process uncaughtException

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

    示例1

    Js代码

    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

    Js代码

    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秒后执行,因为它在异常捕获时,已经加入事件队列中。

  • 相关阅读:
    初识SpringBoot
    Dubbo案例SSM整合
    Dubbo
    Spring错题整合
    SSM整合
    SpringMVC数据校验
    SpringMVC拦截器
    SpringMVC文件上传
    SpringMVC异常
    字符串
  • 原文地址:https://www.cnblogs.com/ysk123/p/9848273.html
Copyright © 2011-2022 走看看