【发布时间】:2017-02-08 15:57:18
【问题描述】:
我正在使用 npm request 模块将传入的请求转发到另一台服务器:
app.get("/somepath", function(req, res) {
var url = proxySetting.global.url + req.url;
req.pipe(request(url)).pipe(res);
});
这里:proxySetting.global.url == http://localhost:4000
现在当我将这样的传入请求转发到目标服务器时,如果目标服务器(localhost:4000) 已关闭或请求在目标服务器上挂起。
会出现ECONNREFUSED或挂断错误等错误。
尝试使用下面的域模块捕获这些错误
var d = domain.create();
d.on("error", function(err) {
console.log("Error occoured while forwarding request");
console.log(err);
res.status(500).send("Error occoured while forwarding request");
});
d.run(function() {
req.pipe(request(url)).pipe(res);
});
尝试在几种组合中捕获错误事件
var request = require("request");
module.exports = function(proxySetting) {
return function(req, res, next) {
var url = proxySetting.global.url + req.url;
url = url.replace(/([^:]\/)\/+/g, "$1") // replacing multiple slashes with one
console.log("Forwarding request to: " + url);
function errorHandler(err) {
console.log("Error occoured while forwarding request");
console.log(err);
res.status(500).send("Error occoured while forwarding request");
}
req.on("error", errorHandler);
res.on("error", errorHandler);
req.pipe(request(url).on("error",errorHandler)).pipe(res);
};
};
但仍然向进程抛出异常并且服务器崩溃 我现在正在做的一种方法是
process.on('uncaughtException', function(err) {
console.log("Some unhandled error occoured");
console.log(err);
console.log("Stopping server");
process.exit(1);
});
但我认为 catch uncaughtException 和 handle 不是一个合适的解决方案
【问题讨论】:
-
我不知道 nodeJS 错误处理,但请看这个,stackoverflow.com/questions/25846475/…。这是您要找的吗?
-
这是问题的部分解决方案,根据他们要求检查连接然后将请求转发到远程服务器的解决方案。但是还有另一种情况,远程服务器启动但请求在远程服务器上挂起,我们将收到一个挂起错误,这将终止代理服务器进程。
标签: node.js express error-handling exception-handling