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

nodejs process uncaughtException的更多相关文章

  1. NodeJS异常处理uncaughtException篇

    很多 NodeJS 的开发者在抱怨异常处理太麻烦,我们会通过一些列博客梳理一下NodeJS中常见的异常处理的手段. 和大多数编程语言一样,在 NodeJS 里可以通过throw抛出一个异常: thro ...

  2. nodejs process.memoryUsage() rss等参数啥含义

    1 前言 使用process.memoryUsage() ,然后可以得到一个对象如下: { rss: 4935680, heapTotal: 1826816, heapUsed: 650472, ex ...

  3. NodeJS的Cluster模块使用

    一.前言大家都知道nodejs是一个单进程单线程的服务器引擎,不管有多么的强大硬件,只能利用到单个CPU进行计算.所以,有人开发了第三方的cluster,让node可以利用多核CPU实现并行. 随着n ...

  4. 路径 (Path)–nodejs

    本模块包含一套用于处理和转换文件路径的工具集.几乎所有的方法只做字符串变换, 不会调用文件系统检查路径是否有效. 通过 require('path') 来加载此模块.以下是本模块所提供的方法: pat ...

  5. nodejs http静态服务器

    使用nodejs写的很简单的静态服务器,没有做cluster处理,没有做缓存处理,不支持访问文件夹,功能只有一个,就是获取到文件后再返回文件内容. var fs = require('fs'); va ...

  6. nodejs和vue的那些事

    nodejs >1.旨在提供一种简单的构建可伸缩网络程序的方法 官方网站:http://nodejs.cn/api/ Node.js 是一个基于Chromev8 JavaScript 运行时建立 ...

  7. nodejs 2017

    1.  nodejs函数 path()  nodejs全局变量 __dirname a.js // 运行 node a.js var path = require('path'); console.l ...

  8. node中非常重要的process对象,Child Process模块

    node中非常重要的process对象,Child Process模块Child Process模块http://javascript.ruanyifeng.com/nodejs/child-proc ...

  9. NodeJS基础API-path相关的问题basename,extname,dirname,parse,format,sep,delimiter,win32,posix

    path 参考文档:http://nodejs.cn/api/path.html const {normalize} = require('path'); // ES6语法 // 相当于 const ...

随机推荐

  1. javaScript系列 [27]- DOM

    本文将详细介绍DOM相关的知识点,包括但不限于Document文档结构.Node节点.Node节点的类型.Node节点的关系以及DOM的基本操作( 节点的获取.节点的创建.节点的插入.节点的克隆和删除 ...

  2. JS运行三部曲(预编译)

    JS运行的三个步骤: 语法分析 预编译 解释执行 语法分析:通俗来说就是通篇检查你的代码有没有语法错误,有语法错误的话,程序是不会执行的 解释执行:也就是程序读一句执行一句 最重点的也就是预编译了,那 ...

  3. Java面向对象笔记 • 【第8章 内部类和泛型】

    全部章节   >>>> 本章目录 8.1 内部类 8.1.1 内部类概述 8.1.2 内部类使用 8.1.3 实践练习 8.2 静态内部类 8.2.1 静态内部类的实现 8.2 ...

  4. 【VUE】VUE使用常见问题搜集

    文章目录 1.日期格式化 2.引用JSON文件中的数据 1.日期格式化 安装插件,官网:Moment.js npm install moment --save 示例: //Sat Mar 14 202 ...

  5. Kafka基础教程(四):.net core集成使用Kafka消息队列

    .net core使用Kafka可以像上一篇介绍的封装那样使用(Kafka基础教程(三):C#使用Kafka消息队列),但是我还是觉得再做一层封装比较好,同时还能使用它做一个日志收集的功能. 因为代码 ...

  6. PHP 中的僵尸进程、孤儿进程详解

    僵尸进程 当子进程运行结束,父进程仍然继续运行,但父进程没有对子进程进行回收,释放子进程占用的资源,此时子进程就成为了一个僵尸进程. 在Unix进程管理中,如果新开的子进程运行结束,父进程将会收到一个 ...

  7. 使用 SSH 隧道实现端口转发、SOCKS 代理

    SSH隧道 本地端口转发 本地客户端通过 local_port 连接到 MobaXterm: MobaXterm 绕过防火墙,使用 user 用户连接到 ssh_server_ip:ssh_serve ...

  8. 桥接模式(python)

    from abc import ABCMeta, abstractmethod class Shape(metaclass=ABCMeta): def __init__(self, color): s ...

  9. 关于 this.$route.meta.operations.includes('delete') 取不到值的问题

    原因是:src/mock/api/sys.login.js中定义的路径 要与src/router/modules/下定义的路由要一致 作用this.$route.matched可以查看匹配信息 来自为 ...

  10. Linux_yum安装时报404错误

    使用yum安装报错如下: [root@localhost ~]# yum install gcc 已加载插件:fastestmirror Loading mirror speeds from cach ...