我是节点的初学者,请原谅我,如果这个问题太明显了。我也试过官方文档,但我可以解决这个问题。
我的节点服务器正通过服务与外部api通信。
这是我在服务api-service.js中所得到的:
var http = require('http');
exports.searchNear = function(lat, long, next){
var options = {
host: '1xx.xx.1xx.1x',
path: '/api/v1/geo,
method: 'GET'
};
var req = http.request(options, function(res) {
var msg = '';
res.setEncoding('utf8');
res.on('data', function(chunk) {
msg += chunk;
});
res.on('end', function() {
console.log(JSON.parse(msg));
});
});
req.on('error', function(err) {
// Handle error
});
req.write('data');
req.end();
var mis = 'hello';
next(null, mis);
}
此时我可以获取Json并将其记录在控制台中。但是我想将返回的json存储在一个变量中,这样我就可以传递next()回调。
我尝试将回调添加到结束事件,如:
exports.searchNear = function(lat, long, next){
....
.....
var req = http.request(options, function(res) {
.....
res.on('end', function(callback) {
console.log(JSON.parse(msg));
callback(msg);
});
});
....
req.end('', function(red){
console.log(red);
});
}
提前谢谢。
答案 0 :(得分:1)
代码中的回调名称应为" next":
var http = require('http');
exports.searchNear = function(lat, long, next) {
var options = {
host: '1xx.xx.1xx.1x',
path: '/api/v1/geo,
method: 'GET'
};
var req = http.request(options, function(res) {
var msg = '';
res.setEncoding('utf8');
res.on('data', function(chunk) {
msg += chunk;
});
res.on('end', function() {
console.log(JSON.parse(msg));
next(null, msg);
});
});
req.on('error', function(err) {
// Handle error
});
req.write('data');
req.end();
}
然后你应该使用你的功能:
searchNear(myLong, myLat, function (err, mesg) {
console.log('your JSON: ', mesg)
});
答案 1 :(得分:0)
我可能误解了你的问题,但显而易见的解决办法是将解析后的json存储在变量中并将变量传递给next()
var parsed = JSON.parse(msg);