我目前正在开发一个 NodeJS API,该 API 从外部 API 获取数据。该 API 还具有一个 MongoDB,其中包含外部 API 不提供的额外数据。
我正在尝试做的事情: 从外部API获取项目,添加保存在MongoDB中的额外数据并整体返回。
我正在尝试这个:
HTTP.get({
host: 'example.com',
path: '/exam/ple',
method: 'GET'
}, function(response){
var body = '';
response.on('data' , function(chunk){
body += chunk;
});
response.on('end', function(){
json = JSON.parse(body);
//Attach own data with fetched data
json.trucks.forEach(function(item){
DB.collection(COLLECTION).findOne({"id" : example.id}, function(err, doc){
if(!err){
item.extra = doc.extra;
item.extra2= doc.extra2;
console.log(truck); //Check if truck is updated
}
});
});
res.body(200).json(json);
});
});
但这不起作用。正文/响应是仅从 API 获取的数据。但数据正在 foreach 循环中合并。
**更新 我添加了“回调”的使用,代码如下:
var getLocalStorage = function(_id , callback){
DB.collection(COLLECTION).findOne({id : _id}), function(err,msg){
if(!err){
callback(null,doc)
}
}
}
HTTP.get({
host: 'demo1757530.mockable.io',
path: '/vrachtwagens/in',
method: 'GET'
}, function(response){
var body = '';
response.on('data' , function(chunk){
body += chunk;
});
response.on('end', function(){
var i = 0,
data = JSON.parse(body);
data.items.forEach(function(item){
i++
getLocalStorage(item._id, function(err,msg){
//MERGE DATA
}
});
if(i === data.items.length){
//return body
}
但是结果还是一样
最佳答案
你不理解node.js中的回调范式。在向 mongo 数据库发出第一个请求之前发送响应。尝试了解更多相关信息,在此之前,这是可行的(但不是很优雅)解决方案
json = JSON.parse(body);
//Attach own data with fetched data
var i=0;
json.trucks.forEach(function(item){
DB.collection(COLLECTION).findOne({"id" : example.id}, function(err, doc){
i++;
if(!err){
item.extra = doc.extra;
item.extra2= doc.extra2;
console.log(truck); //Check if truck is updated
}
if (i === json.trucks.length){
res.body(200).json(json);
}
});
});
关于node.js - 将 API 数据与 MongoDB 数据结合起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37617659/