ghjkghjkghj 2023-03-20 14:21 采纳率: 66.7%
浏览 9
已结题

如何阻止node异常退出进程?

使用node-fetch处理http请求,网络出错的时候返回错误:

request to http://xxx/blur/get failed, reason: getaddrinfo ENOTFOUND 
    at ClientRequest.<anonymous> (file:///Users/project/node_modules/node-fetch/src/index.js:108:11)
    at ClientRequest.emit (node:events:513:28)
    at Socket.socketErrorListener (node:_http_client:481:9)
    at Socket.emit (node:events:513:28)
    at emitErrorNT (node:internal/streams/destroy:157:8)
    at emitErrorCloseNT (node:internal/streams/destroy:122:3)
    at processTicksAndRejections (node:internal/process/task_queues:83:21) {
  type: 'system',
  errno: 'ENOTFOUND',
  code: 'ENOTFOUND',
  erroredSysCall: 'getaddrinfo'
}

然后node进程就退出了。
处理了catch:

fetch(GET_URL)
        .then(res => res.json())
        .then(json => {
            //logic
        })
        .catch(err => {console.log(err)});

......
process.on('uncaughtException', function(error){
    console.log('uncaughtException', error);
});

依然会退出,

我的预期是不要让它退出node进程,如何处理?

  • 写回答

3条回答 默认 最新

  • 追cium 2023-03-20 14:33
    关注

    参考GPT和自己的思路:

    要防止Node异常退出的最好方法是通过添加异常处理程序来捕获错误。在你的情况下,你已经在代码中添加了一个异常处理程序,但它似乎没有正确地捕获错误。

    你可以尝试使用以下代码替换你的 process.on() 方法来捕获所有未处理的 Promise 中的错误:

    process.on('unhandledRejection', (reason, promise) => {
      console.log('Unhandled Rejection at:', promise, 'reason:', reason);
      // 对错误进行处理,比如记录日志、重启进程等
    });
    

    这个事件处理程序将捕获所有未处理的 Promise 中的错误,并在 Node 记录到控制台或日志中。此外,如果需要可以通过记录日志、发送通知或重启进程等方式来处理错误。

    如果你不确定 Promise 为什么会引发错误,可以在 Promise 中添加一个 .catch() 方法来捕获错误并处理它。例如:

    fetch(GET_URL)
      .then(res => res.json())
      .then(json => {
        // logic
      })
      .catch(err => {
        console.log('Error caught:', err.message);
        // 处理错误,比如记录日志、重启进程等
      });
    

    注意,使用 unhandledRejection 并不会防止 Node 进程异常退出,只会将错误捕获到控制台或日志中供参考。为了防止 Node 进程异常退出,你也可以使用 try-catch 语句直接捕获错误并进行处理。例如:

    try {
      const res = await fetch(GET_URL);
      const json = await res.json();
      // logic
    } catch (err) {
      console.log('Error caught:', err.message);
      // 处理错误,比如记录日志、重启进程等
    }
    

    总之,为了防止 Node 进程异常退出,请确保捕获所有可能引发错误的地方,并适当地处理错误。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月28日
  • 已采纳回答 3月20日
  • 修改了问题 3月20日
  • 创建了问题 3月20日

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装