【问题标题】:how to save json object from third party api如何从第三方 api 保存 json 对象
【发布时间】:2017-06-28 04:04:41
【问题描述】:

我无法弄清楚如何将 json 对象从第三方 api 保存到我的个人 localhost mongodb。我相信我应该在 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();
    })
}
}

【问题讨论】:

  • 要保存在猫鼬中,您需要在猫鼬对象上调用保存,而不是响应对象。我不是猫鼬用户,但可能类似于 -> mongoose.products.save(resp)
  • 我会试试的,谢谢 Keith

标签: javascript node.js mongodb api express


【解决方案1】:

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

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

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

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

您还可以进行验证等。请参阅the docs

然后您可以使用 .insertMany 一次性保存它们或遍历您的文档:

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

...

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

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

	res.send(resp);
})

在此之后,您将在本地数据库中收集产品。 如果你愿意,你也可以将这些调用转换成一个方法。

【讨论】:

  • 谢谢安东尼奥,这正是我想要的!
  • 嘿,安东尼奥,我在保存大量数据时遇到了循环问题,我想知道是否可以创建无限 for in 循环?
猜你喜欢
  • 2013-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-28
  • 1970-01-01
  • 2020-01-11
  • 1970-01-01
相关资源
最近更新 更多