NodeJS: 将JSON保存到MongoDB

6

我正在尝试从API获取JSON并将其存储到MongoDB数据库中。显然,它不起作用。我的应用程序似乎在我尝试将数据保存到数据库时停滞不前。请建议如何解决。

这是我的代码:

var express = require('express');
var router = express.Router();
var http = require('http');
var mongo = require('mongoskin');
var db = mongo.db("mongodb://localhost:27017/zak", {native_parser : true});


/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});


var site = 'http://www.vsechnyzakazky.cz/api/v1/zakazka/?format=json&limit=2';


function getData(cb) {

    http.get(site, function(res) {
        // explicitly treat incoming data as utf8 (avoids issues with multi-byte chars)
        res.setEncoding('utf8');

        // incrementally capture the incoming response body
        var body = '';
        res.on('data', function(d) {
            body += d;
        });

        // do whatever we want with the response once it's done
        res.on('end', function() {
            try {
                var parsed = JSON.parse(body);
            } catch (err) {
                console.error('Unable to parse response as JSON', err);
                return cb(err);
            }

            // pass the relevant data back to the callback
            cb(
                parsed.objects
               );
        });
    }).on('error', function(err) {
        // handle errors with the request itself
        console.error('Error with the request:', err.message);
        cb(err);
    });

}

function writeData (data, allGood){     

// couple of visual checks if all looking good before writing to db
console.log('writing');
console.log(typeof data);
console.log(data);

db.collection('zakazky').save(data, function(error, record){
if (error) throw error;
console.log("data saved");

});
}

function allGood(){console.log('all done');}

getData(writeData);

// ---------------------
module.exports = router;

数据是否出现在数据库中? - Philipp
不,我实际上手动插入了一些数据来测试是否正确设置了数据库连接。使用“db.zakazky.find()”后,我看到了测试数据,但没有看到我正在尝试保存的数据。 - B K
1个回答

4
您正在调用save()而不是insert()。更改此部分即可正常工作:
// this should call insert, not save
db.collection('zakazky').insert(data, function(error, record){
    if (error) throw error;
    console.log("data saved");
});

这里应该可以正常工作。然而,一些 MongoDB 驱动程序可能希望第二个 .save() 参数是 一个 options 对象 - Leonid Beschastny
谢谢@victorkohl。Insert()确实起作用了。我很惊讶并且在想为什么,因为这是我最初尝试使用的方法,只有在最后一步才切换到save()。 感谢您的帮助! - B K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接