我使用NPM请求模块转发传入的请求到另一台服务器为:投产ECONNREFUSED错误不是由错误事件处理,并尝试捕捉
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);
});
但我认为抓住uncaughtException和处理不是一个合适的解决方案
我不知道nodeJS错误处理,但请看看这个,http://stackoverflow.com/questions/25846475/node-js-handling-tcp-socket-error-econnrefused。你在找这个吗? –
这是问题的部分解决方案,按照他们要求检查连接并将请求转发到远程服务器的解决方案。但是当远程服务器启动但是请求挂在远程服务器上时会出现另一种情况,并且我们将得到一个挂起错误,它将终止代理服务器进程。 –