我使用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。你在找這個嗎? –
這是問題的部分解決方案,按照他們要求檢查連接並將請求轉發到遠程服務器的解決方案。但是當遠程服務器啓動但是請求掛在遠程服務器上時會出現另一種情況,並且我們將得到一個掛起錯誤,它將終止代理服務器進程。 –