Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 将API数据与MongoDB数据相结合_Node.js_Mongodb - Fatal编程技术网

Node.js 将API数据与MongoDB数据相结合

Node.js 将API数据与MongoDB数据相结合,node.js,mongodb,Node.js,Mongodb,我目前正在开发一个从外部API获取数据的NodeJS API。该API还有一个MongoDB,其中包含外部API不提供的额外数据 我想做的是: 从外部API获取项目,添加保存在MongoDB中的额外数据,并作为一个整体返回 我正在尝试这个: HTTP.get({ host: 'example.com', path: '/exam/ple', method: 'GET' }, function(response){ var body = ''; respon

我目前正在开发一个从外部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);
    });
});
但这不起作用。主体/响应是仅从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数据库的第一个请求之前发送响应。试着了解更多关于它的信息,在你这么做之前,这是一个有效的(尽管不是很优雅)解决方案


你说得对,以前从未和nodejs合作过。。我知道它不优雅,但找不到任何其他方法来达到这个效果。非常感谢你的帮助!
    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);
            }
        });
    });