套接字错误节点js

时间:2018-01-08 10:23:05

标签: javascript node.js sockets swi-prolog

我收到套接字结束的错误,我正在尝试做一个http请求(getPrologFarm2)来从prolog获取信息并且它给了我这个错误,我之前已经做了一个就像这样它确实有效。

错误:

Exception has occurred: Error
Error: socket hang up
    at createHangUpError (_http_client.js:254:15)
    at Socket.socketOnEnd (_http_client.js:346:23)
    at emitNone (events.js:91:20)
    at Socket.emit (events.js:185:7)
    at endReadableNT (_stream_readable.js:974:12)
    at _combinedTickCallback (internal/process/next_tick.js:80:11)
    at process._tickCallback (internal/process/next_tick.js:104:9)

代码:

router.route('/farmacias')
  .get(function (req, res) {
    var info;

    client.methods.getFarmacias(function (data, res) {
      info = data;
    });

    sleep(2000);

    var hours = new Date().getHours();
    var list = [];

    for (var i = 1; i < info.length; i++) {
      if (hours < 12) {
        if (info[i].restricaoTemporal == 'manha') {
          list.push(info[i].nome);
        }
      } else {
        if (info[i].restricaoTemporal == 'tarde') {
          list.push(info[i].nome);
        }
      }
    }

    var info1;

    client.methods.getPrologFarm2(function (data, res) {
      info1 = data
    });

    res.json(info1);

  });

1 个答案:

答案 0 :(得分:0)

您收到错误是因为您在.get(function (req, res)内进行了编码  抛出一个未处理的异常,套接字崩溃。

正如@Jeremy Thille在评论中所提到的,你有一些异步调用而sleep不是答案。也许这就是问题所在,因为当您尝试将其转换为json时,info1将是undefined

首先,您应该尝试在整个try/catch函数中添加get块来检查错误是什么,例如

router.route('/farmacias')
  .get(function(req, res) {

    try {
      //your code

    } catch (e) {
      res.send(e)
    }

  });

其次,由于您没有使用Promises并且有回调,因此您的代码应该更像这样。

    router.route('/farmacias')
      .get(function(req, res) {
        client.methods.getPrologFarm2(function(data, res) {
          res.json(data);
        });
      });

或者像这样

router.route('/farmacias')
  .get(function(req, res) {
    client.methods.getFarmacias(function(data, res) {

      var hours = new Date().getHours();
      var list = [];

      for (var i = 1; i < data.length; i++) {
        if (hours < 12) {
          if (data[i].restricaoTemporal == 'manha') {
            list.push(data[i].nome);
          }
        } else {
          if (data[i].restricaoTemporal == 'tarde') {
            list.push(data[i].nome);
          }
        }
      }

      res.json(list);

    });

  });