向未响应的服务器发出http.request时出现node.js错误

时间:2013-03-02 17:20:38

标签: node.js asynchronous express

我正在编写一个node.js服务器,它充当客户端和java服务器之间的API,它是node.js API的下游一步。 API接受来自客户端的传入HTML请求,重新格式化它们,然后将它们发送到java服务器,后者返回node.js API的答案,该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]; //未处理的'错误'事件                          ^   错误:连接ECONNREFUSED       在errnoException(net.js:846:11)       在Object.afterConnect [as oncomplete](net.js:837:19)

我需要做的就是在java服务器关闭时捕获“无响应”,以便我可以执行另一个函数或者只是将该事实返回给客户端,当然,没有节点崩溃!这可能很简单,但我发现没有任何效果。我已经尝试过process.on('uncaughtException'),我已经尝试过(如代码中)response.on('error')。

我是节点的新手,无法看到问题出在哪里......非常感谢任何帮助!

1 个答案:

答案 0 :(得分:4)

你试过吗

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'); }
}).on('error', function(e) {
    console.log("handle error here");
}).end();

听起来像是在http.request返回的请求对象上抛出错误,而不是在响应对象上抛出错误

http://nodejs.org/api/http.html#http_http_request_options_callback