当前位置:首页 > > 充电吧
[导读]1.2. 可以uncaughtException来全局捕获未捕获的Error, 使用uncaughtException 21.2.1. 使用 try/catch 31.3. 守护NodeJS进程和记录

1.2. 可以uncaughtException来全局捕获未捕获的Error, 使用uncaughtException 2

1.2.1. 使用 try/catch 3

1.3. 守护NodeJS进程和记录错误日志 3

1.3.1. 使用node来守护node 4

1.3.2. 使用shell启动脚本守护node 4


1.1.1.1.1. 1、callback function

通过异步回调来处理异步操作可能是目前nodejs中使用最广泛的方案。通过约定回调函数中第一个参数,为error对象,来传递错误,当第一个参数为null时表示没有错误。为什么要这么做呢,因为异步中的错误是无法通过try catch捕获的。

2、我们上面的例子中演示的,不管采用那种方式,我们都不能处理异步中抛出的异常,异步中的异常只能通过传递来传递给调用者,所以,在异步中应该尽可能的少做逻辑,只是作为必要的操作等,比如,我们可以通过异步来获取数据,但数据的格式化等,则放到异步之外(也就是上面演示中的setTimeout之外),这样的话,绝大部分的异常都能被捕获,应用crash的几率也会大大的减少。

最后,尽管我们能捕获大部分错误,但是我们还是应该把捕获到的异常进行记录分析,尽可能减少异常,并且,通过完善的单元测试来事先发现问题。

 

1.1.1.1. 异步异常的特点

由于node的回调异步特性,无法通过try catch来捕捉所有的异常:

try {

  process.nextTick(function () {

   foo.bar();

  });} catch (err) {

  //can not catch it}

 

1.1.1.2. domain

在node v0.8+版本的时候,发布了一个模块domain。这个模块做的就是try catch所无法做到的:捕捉异步回调中出现的异常。

 

1.1. 可以uncaughtException来全局捕获未捕获的Error, 使用uncaughtException


我们可以uncaughtException来全局捕获未捕获的Error,同时你还可以将此函数的调用栈打印出来,捕获之后可以有效防止node进程退出,如:

process.on('uncaughtException', function (err) {
  //打印出错误
  console.log(err);
  //打印出错误的调用栈方便调试
  console.log(err.stack);
});


这相当于在node进程内部进行守护, 但这种方法很多人都是不提倡的,说明你还不能完全掌控Node.JS的异常。

1.1.1. 使用 try/catch


我们还可以在回调前加try/catch,同样确保线程的安全。

1.2. 守护NodeJS进程和记录错误日志


现在已经基本上解决了Node.JS因异常而崩溃的问题,不过任何平台都不是100%可靠的,还有一些错误是从Node底层抛出的,有些异常try/catch和uncaughtException都无法捕获。之前在运行ourjs的时侯,会偶尔碰到底层抛出的文件流读取异常,这就是一个底层libuv的BUG,node.js在0.10.21中进行了修复。

面对这种情况,我们就应该为nodejs应用添加守护进程,让NodeJS遭遇异常崩溃以后能马上复活。

另外,还应该把这些产生的异常记录到日志中,并让异常永远不再发生。

1.2.1. 使用node来守护node


node-forever 提供了守护的功能和LOG日志记录功能

 

1.2.2. 使用shell启动脚本守护node


使用node来守护的话资源开销可能会有点大,而且也会略显复杂,OurJS直接在开机启动脚本来进程线程守护。

如在debian中放置的 ourjs 开机启动文件: /etc/init.d/ourjs

这个文件非常简单,只有启动的选项,守护的核心功能是由一个无限循环 while true; 来实现的,为了防止过于密集的错误阻塞进程,每次错误后间隔1秒重启服务

 

 //ati
 
 
process.on('uncaughtException', function (err) {
      console.log("********err ati start");
  //打印出错误
  
console.log(err);
  //打印出错误的调用栈方便调试
  
console.log(err.stack);
     console.log("********err ati end");
});

 setTimeout(function () {
     throw "err2 from timeout";
 },15000);
setTimeout(function () {
 //   throw "err  from timeout aft 5 sec";
},5000);
console.log(" time out aft");
//atiend

 

如果fsr open page then timeouterr...can resume.....

If fst err time ot ,,then channel close...cant resume..

 

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭