将API数据与MongoDB数据结合起来

我目前正在从一个外部API获取数据的NodeJS 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); }); }); 

但是这不起作用。 body / response是仅从API中获取的数据。 但数据正在foreach循环中合并。

**更新我已经添加了“callback”的使用,代码如下:

  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中的callback模式 在第一次请求mongo数据库被触发之前,响应被发送。 尝试了解更多关于它,然后再做,这是工作(但不是很优雅)的解决scheme

  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); } }); });