如何在nodejs中保存数据库中的公共api数组数据

时间:2017-05-12 05:57:58

标签: node.js express

我已经创建了一个api,以获取与pincode相关的区域详细信息。当我输入pincode时,它会显示该pincode的区域详细信息。但有时我的数据库中不存在pincode及其相关详细信息,所以我需要调用它通过公共api并将该密码和区域详细信息存储在我的database.my集合中,该集合具有不同的字段名称,例如我的集合中的state和public api json数据中的state_name,那么该怎么做?

代码:

router.get('/pincode/:pincode',function(req, res) {
Pincode.find({pincode : req.params.pincode}, function(error, pincode ) {
    if(pincode == ''){
        var request = require('request');
         console.log();
        res.statusCode = 302;           
            request('http://postalpincode.in/api/pincode/'+req.params.pincode, function (error, res, body) {

            if (res.statusCode === 200) {
                var pincodeData = new Pincode({
                    pincode:req.params.pincode,
                    body:body.PostOffice 

                });

                pincodeData.save(function (err,results) {
                    if (err) {
                        return err;
                    }
                    else {
                        console.log(body);
                    }
                });
            }
        });
    }
    res.json(pincode); 
});  

});

1 个答案:

答案 0 :(得分:0)

我还没有对代码进行过测试,但方法应该是正确的。 为了更改字段名称,我现在能想到的是更改JSON对象。您可以查看是否在Mongoose Middleware上找到了可以在您的案例中使用的内容。但我所做的也应该有效。

var request = require('request');

router.get('/pincode/:pincode',function(req, res) {
    Pincode.find({pincode : req.params.pincode}, function(error, pincode ) {
        if(pincode.length){           
                request('http://postalpincode.in/api/pincode/'+req.params.pincode, function (error, res, body) {

                    //For changing field name
                    body.postOffice.forEach(function(entry, index){
                        body.postOffice[index]["state"] = body.postOffice[index]["state_name"];
                      delete(body.postOffice[index]["state_name"]);
                    });
                    pincodeData.update({pincode:req.params.pincode},{$push:{"body":body.PostOffice}}, {new:true, upsert: true}, function(err, docs){
                        res.json(docs);
                    });
            });
        }
        else{
            res.json(pincode);    
        }

    });  
});