我收到套接字结束的错误,我正在尝试做一个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);
});
答案 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);
});
});