如果其他服务器无法访问,Node.js应用程序将退出。如何阻止我的应用程序停止?

时间:2014-10-17 15:44:56

标签: javascript node.js

我正在编写一个应用程序,定期检查远程服务器以检入新版本的软件。这是我在node.js的第一次尝试,所以请耐心等待。 当服务器启动并运行时,程序运行完全正常 但是,当服务器未运行时,程序将退出并显示错误:

events.js:72
throw er; // Unhandled 'error' event
      ^
Error: connect ECONNREFUSED
at errnoException (net.js:904:11)
at Object.afterConnect [as oncomplete] (net.js:895:19)

从我读过的内容来看,我相信我已经设置了我的代码来正确处理错误,方法是在回调中添加一个response.on(' error',...)部分。 但是,正如您从错误中看到的那样,它没有向我提供我尝试设置的错误console.logs。 这是我的代码中不起作用的部分,如果需要,我可以包含其他部分,此时它只是一个非常大的应用程序:

var index = require ("./index");
var http = require ('http');
var fs = require ("fs");

var apps = [{
  "name":"IDSocket",
  "localVersion": "",
  "hostVersion": "",
  "downloadURL": ""
},
{
  "name": "X-Wing vs. Tie Fighter",
  "localVersion": "4.2.1",
  "hostVersion": "",
  "downloadURL": ""
}]

//checks host server for host version, stores as json object
function checkHost(hostinfo){
  callback1 = function(response) {
    var str = '';
    var hostObject;

    response.on('data', function (chunk) {
      str += chunk;
    });

    response.on('error', function(err) {
      console.log('problem with request: ' + err.message);
      hostObject = "why, error? " + err.message
    });

    response.on('end', function () {
      hostObject = str;
      hostObject = JSON.parse(hostObject);
      apps[0]["hostVersion"] = hostObject[0]["version"];
      apps[0]["downloadURL"] = hostObject[0]["downloadURL"];
      apps[1]["hostVersion"] = hostObject[1]["version"]
      apps[1]["downloadURL"] = hostObject[1]["downloadURL"]
      console.log(apps[0]["hostVersion"] + ": recieved IDSocket host version");
      index.everyFourHours();
    });
  }

  http.request(hostinfo, callback1).end();

};

提前感谢任何帮助我了解这里发生了什么的事情!

编辑: 到目前为止我尝试过的事情:

尝试阻止http.request行以及整个回调函数,使用catch块只是console.log错误

process.on(' uncaughtException'

domain.create& domain.run

1 个答案:

答案 0 :(得分:1)

您应该在http.request的实例中添加错误处理程序。

例如,您可以将http.request来电更改为:

var req = http.request(hostinfo, callback1);
req.on('error', function(err) { console.log("ERROR: " + err.message); });
req.end();

阅读here了解详情。