2017-02-09 72 views
0

我无法弄清楚如何从第三方API保存json对象到我的个人localhost mongodb。我相信我应该在api控制器中创建另一种方法,但不知道应该使用哪种方法,任何帮助都会非常感谢! 这是我的代码抱歉,如果这是一个愚蠢的问题。如何从第三方api保存JSON对象

//server.js 
var express = require('express'); 
var bodyParser = require('body-parser'); 
var path = require('path'); 
var mongoose = require('mongoose'); 
var Router = require('./routes'); 
var morgan = require('morgan'); 
var port = process.env.PORT || 3000; 

var app = express(); 

//database connect 
mongoose.connect('mongodb://localhost/Emagispace') 


app.use(
express.static('views'), 
bodyParser.json(), 
bodyParser.urlencoded({extended : true}), 
morgan('dev') 
); 

Router(app); 


app.listen(port,()=>{ 
console.log(`Server running on ${port}`); 

//Routes 

var API = require('./controllers/api'); 

module.exports = (app)=>{ 

app.get('/', (req, res)=>{ 
    res.sendFile('index.html', {root : './views'}); 
}); 

app.get('/api/emagispace', API.product) 
} 

//API controller 

var request = require('request-promise'); 
var baseURI = 'example'; 

module.exports = { 

product : (req, res)=>{ 
    request({ 
     method : 'GET', 
     url : `${baseURI}/api/emagispace/${req.query.products}` 
    }) 
    .then((resp)=>{ 
     console.log('Product list : ', resp); 
     res.send(resp).save(); 
    }) 
} 
} 
+0

要保存在猫鼬中,你想要调用保存在猫鼬对象上,而不是响应对象。我不是猫鼬的用户,但它可能类似于 - >'mongoose.products.save(resp)' – Keith

+0

我会试试看,谢谢Keith –

回答

0

为了使用mongoose保存文档,您需要首先指定Schema。

//product-model.js 
 
var mongoose = require('mongoose'); 
 
var Schema = mongoose.Schema; 
 

 
var ProductSchema = new Schema({ 
 
\t name: String, 
 
\t price: String, 
 
\t //And all other data you need 
 
}); 
 

 
var Product = mongoose.model('Product', ProductSchema);

你也可以做验证和其他东西。请参阅the docs

然后你可以使用.insertMany将它们保存在一个镜头或iterrate在你的文件:

var Product = require('../models/product-model.js'); 
 

 
... 
 

 
.then((resp)=>{ 
 
     //I assume that resp is an array of products here 
 
\t console.log('Product list : ', resp); 
 

 
\t //Go over your product list and save them 
 
\t for (var product of resp) { 
 
\t \t var p = new Product(product); 
 
\t \t p.save(); 
 
\t } 
 
    
 
     //OR 
 
\t Product.insertMany(resp); 
 

 
\t res.send(resp); 
 
})

这个你以后就会有产品集合在您的本地数据库。 如果需要,还可以将这些调用转换为方法。

+0

谢谢安东尼奥这就是我正在寻找的! –

+0

嘿安东尼我有问题与循环节省大量的数据,我想知道是否有可能在循环中创建一个无限? –