Javascript 未触发结束时的NodeJS res.on
我在向客户回复数据时遇到了一个问题。响应不会发送到客户端,res.on('end')不会被触发。我不知道该怎么办。我的目标是将redis中检索到的数据发送到客户端。有什么办法可以让这一切顺利吗?。顺便说一下,这是我的代码员。谢谢Javascript 未触发结束时的NodeJS res.on,javascript,node.js,express,redis,httprequest,Javascript,Node.js,Express,Redis,Httprequest,我在向客户回复数据时遇到了一个问题。响应不会发送到客户端,res.on('end')不会被触发。我不知道该怎么办。我的目标是将redis中检索到的数据发送到客户端。有什么办法可以让这一切顺利吗?。顺便说一下,这是我的代码员。谢谢 app.get('/contacts/list', function(req, res) { var someId = null; var someData; var optionsA = { hostname: host,
app.get('/contacts/list', function(req, res) {
var someId = null;
var someData;
var optionsA = {
hostname: host,
path: checkHeaders,
headers: {
'Content-Type': 'application/json',
'someheaders1': req.headers.someheaders1,
'someheaders2': req.headers.someheaders2,
'someheaders3': req.headers.someheaders3,
'someheaders4': req.headers.someheaders4,
'user-agent': req.headers['user-agent'],
'local': req.header('x-forwarded-for') || req.connection.remoteAddress
}
};
var req = https.get(optionsA, function(res) {
res.on('data', function(chunk) {
if (res.statusCode === 200) {
userId = chunk;
redisc.smembers('setId:' + someId, function(err, data) {
if (!err) {
someData = data;
} else {
console.log(err);
}
});
} else {
console.log('404');
}
});
res.on('end', function() {
res.send(someData);
console.log('end');
});
});
req.on('error', function(e) {
console.log('ERROR: ' + e.message);
});
res.end();
});
提前谢谢。各位。鉴于您的
redisc.smembers
查询本质上是异步的,您必须进行以下编辑:
var-req=https.get(optionsA,function(_-res){
。在https.get块内的其他地方也做类似的更改res.on(“结束”)
块内部移除res.send()
var _req = https.get(optionsA, function(_res) {
_res.on('data', function(chunk) {
if (_res.statusCode === 200) {
userId = chunk;
redisc.smembers('setId:' + someId, function(err, data) {
if (!err) {
res.send(data); //you probably want to wrap data inside JSON.stringify()
res.end();
} else {
console.log(err);
}
});
} else {
console.log('404');
}
});
_res.on('end', function() {
console.log('end');
});
});
_req.on('error', function(e) {
console.log('ERROR: ' + e.message);
});
res.end()// Remove this line. It is prematurely closing your connection without sending any data. I've only included it here to show what needs to be done.
res
ivar,节点认为新的res就是您要发送数据的地方