我正在编写一个 node.js 服务器,它充当客户端和 java 服务器之间的 API,它是 node.js API 的下游一步。API 接受来自客户端的传入 HTML 请求,重新格式化它们,然后将它们发送到 java 服务器,后者将其答案返回给 node.js API,后者将其返回给客户端。这一切都很好,除了服务器关闭时。我需要捕捉该事件,就像我可以捕捉 502 或 302 一样......这是我的代码:
async.waterfall(
[
function(callback){
var options = { host: 'localhost', port: '8080',
path: '/javaServerWork/' + req.query.foo + '?toDo=' + req.query.bar,
method: 'GET',
headers: { accept: 'application/json' }
};
http.request(options, function(response){
response.on('error', function(exception) { Console.log("error here"); }
if(response.statusCode == '200'){ callback(null, response); }
else if (response.statusCode == '502') { res.send('502'); }
else { res.send('not 200 and not 502'); }
}).end();
},
function(response){
var javaResponse = '';
response.on('error', function(exception){ Console.log("error here");});
response.on('data', function (chunk){ javaResponse += chunk; });
response.on('end', function(){
res.send(javaResponse);
})
}
]
);
当我启动此节点服务器并向 node.js 服务器发出请求,然后尝试访问 java 服务器时,node.js 崩溃并且我在控制台中收到以下错误:
events.js:69 抛出参数[1];// 未处理的“错误”事件 ^ 错误:在 Object.afterConnect [as oncomplete] (net.js:837:19) 的 errnoException (net.js:846:11) 处连接 ECONNREFUSED
我需要做的就是在 java 服务器关闭时捕获“无响应”,这样我就可以执行另一个函数或简单地将这个事实返回给客户端,当然,不会导致节点崩溃!这可能很简单,但我没有发现任何可行的方法。我已经尝试过 process.on('uncaughtException'),我已经尝试过(如代码中所示)response.on('error')。
我是节点新手,看不到问题出在哪里......非常感谢任何帮助!