2017-02-09 4 views
0

У меня возникли проблемы с поиском, как сохранить объект json от стороннего api до моего личного localhost mongodb. Я полагаю, что я должен создать другой метод в контроллере api, но не уверен, какой метод следует использовать, любая помощь была бы очень благодарна! Вот мой код извините, если это глупый вопрос.Как сохранить объект json от стороннего api

//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, вам захочется вызвать save на объект mongoose, а не объект ответа. Я не пользователь mongoose, но это может быть что-то вроде: «mongoose.products.save (resp)' – Keith

+0

Я попробую поблагодарить Keith –

ответ

0

Чтобы использовать документы для сохранения документов, вам необходимо сначала указать схему.

//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

Привет Антонио У меня проблемы с циклом, сохраняющим много данных, и мне интересно, возможно ли создать бесконечный цикл for? –

Смежные вопросы