2013-03-02 94 views
1

我正在写一个node.js服务器,它充当客户端和一个位于该节点下游一步的java服务器之间的API。 js API。 API接受来自客户端的传入HTML请求,重新格式化它们,然后将它们发送给java服务器,java服务器返回其对node.js API的答案,并将其返回给客户端。除了服务器关闭时,这一切都很精彩。我需要赶上这一事件,就像我能赶上一个502或302 ......这里是我的代码:node.js错误,当一个http.request被发送到没有响应的服务器

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 throw arguments[1]; // Unhandled 'error' event ^ Error: connect ECONNREFUSED at errnoException (net.js:846:11) at Object.afterConnect [as oncomplete] (net.js:837:19)

所有我需要做的是抓住“没有响应”当Java服务器宕机,从而使我可以执行另一个函数,或者简单地将这个事实返回给客户端,当然,没有节点崩溃!这可能很简单,但我没有发现任何可行的方法。我曾尝试process.on('uncaughtException'),我试过(如代码中)response.on('错误')。

我是新来的节点,不能看到问题的地方...任何帮助非常感谢!

+0

调用java的服务器以200 [OK]响应完成? – D3V 2013-03-02 17:38:07

+0

是的,它的确如此... – hkuich 2013-03-04 20:34:46

回答

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

+0

你是对的!我称之为'response.on('error')',但我当然需要根据请求调用它...谢谢! – hkuich 2013-03-04 20:35:50

相关问题