当前位置: 首页 > 知识库问答 >
问题:

捕获节点中的异常。js express代理应用程序

慎俊雄
2023-03-14

我有一些下面这样的代理代码。问题是,每当目标服务器停机时,此代码都无法捕获错误,导致整个应用程序崩溃,出现错误:connect econnreference

对于代理服务器来说,这很糟糕,它只需要向调用者返回一个错误,而不是在第一次无法访问目标服务器时完全崩溃。

现在什么是正确的方法?

节点版本6。

    let targetUrl = "http://foo.com/bar"

    app.options('/cors-proxy/bar', cors())
    app.post('/cors-proxy/bar', function(req, res) {  
      console.log(`received message with method ${req.method} and some body ${req.body}`)
      console.log(`relaying message to ${targetUrl}`)
      try {
        req.pipe(
          request({
            url: targetUrl,
            method: req.method,
            json: req.body 
          })
        ).pipe(res);
      } catch (err) {
        res.status(502)
        res.render('error', {
          message: err.message,
          error: err
        });
      } 
    });

谢谢!

共有1个答案

商昂然
2023-03-14

一般来说,您不能使用try/cat来捕获异步回调或异步操作中可能出现的异常。这只会捕获同步错误。

相反,您必须阅读每个特定的异步操作如何报告错误,并确保已插入该特定机制。

例如,streams向您使用stream截获的流报告错误并向其发送消息。关于('错误',…) 。例如,request()可以通过几种不同的方式报告错误,具体取决于您实际使用的request()库以及使用方式。

一些参考资料:

使用节点进行错误处理。js流

流可读错误

错误事件如何影响节点中的管道流。js

 类似资料:
  • 问题内容: 我正在与一个应用程序一起工作,该应用程序从XML Schema生成表单(使用JAXFront库),并将用户填写的数据存储到XML文档中。 我在需要时放置了try-catch-finally块,但是在主线程结束时(AWT线程仍在运行)捕获异常时我有一个小问题。 我有两个班级负责主要工作,其他班级对这个问题并不重要: 主类 :具有以下结构。初始化应用程序并运行主机 } 框架类 :生成视图和

  • 本节介绍如何使用三个异常处理程序组件(try、catch 和 finally)来编写异常处理程序。 然后,介绍了 Java SE 7中引入的 try-with-resources 语句。 try-with-resources 语句特别适合于使用Closeable的资源(例如流)的情况。 本节的最后一部分将通过一个示例来分析在各种情况下发生的情况。 以下示例定义并实现了一个名为ListOfNumbe

  • 我正在尝试创建一个过滤器来处理异常(请参见在JSF中处理未捕获的异常) 我在日志中看到错误: 我做错了什么?

  • 我在运行python flask web应用程序时得到了这个回溯(最近一次调用是最后一次)。 从烧瓶导入烧瓶app=烧瓶(名称) @app.route ("/") def你好():返回" 我正在终端上运行服务器:“cd Flask\u Blog”,“export Flask\u DEBUG=1” 我也尝试初始化烧瓶模块分配"flask.init()"代码,但我仍然得到错误的网页浏览器! 我做错什么

  • 问题内容: 我有一个应用程序,需要编写一个自定义的全局未捕获的异常处理程序。我已经阅读了所有stackoverflow线程,并且其中每个线程都只是缺少一个清晰而简单的示例,说明了如何实现这一点。 考虑以下简单示例: 它抛出一个标准异常,它只是一个标准输出。我如何实现自己的异常,该异常可以通过将错误输出到日志文件中的简单方法覆盖标准异常?显然,实际的应用程序要大得多,我们正在谈论未捕获的异常,这就是

  • 问题内容: 我们在工作中使用JUnit 3,并且没有注释。我想在我们的代码中添加一个实用程序来包装它: 所以我尝试了这个: 但是,我认为Java无法在catch块中使用通用异常类型。 围绕Java限制,我该怎么做? 有没有办法检查变量的类型? 问题答案: 您可以传入Class对象并以编程方式进行检查。 我不确定您是否要重新扔球;重新抛出将同样导致测试失败/错误,但是从语义上讲我不会,因为它基本上意