gpt4 book ai didi

node.js - 捕获 Node.js 快速代理应用程序中的异常

转载 作者:太空宇宙 更新时间:2023-11-04 00:37:22 25 4
gpt4 key购买 nike

我有一些像下面这样的代理代码。问题是,每当目标服务器关闭时,此代码都无法捕获错误,从而导致整个应用程序因 Error: connect ECONNREFUSED 崩溃。

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

现在正确的解决方法是什么?

Node 版本 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
});
}
});

谢谢!

最佳答案

一般情况下,不能使用try/catch来捕获异步回调或异步操作中可能发生的异常。这只会捕获同步错误。

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

例如,流向您使用 stream.on('error', ...) 拦截的流报告错误消息。例如,request() 可以通过多种不同的方式报告错误,具体取决于您实际使用的 request() 库以及使用方式。

一些引用:

Error handling with node.js streams

Stream Readable Error

How Error Events Affect Piped Streams in Node.js

关于node.js - 捕获 Node.js 快速代理应用程序中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38406757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com