2015-03-18 3 views
3

Я пытаюсь получить JSON из API и хранить его в базе данных MongoDB. Очевидно, что он не работает. Мое приложение, похоже, держится вокруг точки, где я пытаюсь сохранить данные в базе данных. Пожалуйста, сообщите, что делать.NodeJS: сохранение 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; 
+0

Имеются ли данные в базе данных? – Philipp

+0

Нет. Я действительно вставил вручную некоторые данные, чтобы проверить, правильно ли я настроил соединение с БД. При использовании 'db.zakazky.find()' я вижу, что тестовые данные, но не то, что я пытаюсь сохранить –

ответ

1

Вы вызываете save() вместо insert(). Измените эту часть, и она будет работать:

// this should call insert, not save 
db.collection('zakazky').insert(data, function(error, record){ 
    if (error) throw error; 
    console.log("data saved"); 
}); 
+0

'save', должно работать отлично. Однако некоторые драйверы MongoDB могут ожидать, что второй параметр '.save()' будет [объектом 'options] (http://mongodb.github.io/node-mongodb-native/api-generated/collection.html#save). –

+0

Спасибо @victorkohl. Вставить() действительно сработало. Я удивлен и задаюсь вопросом, почему, потому что это то, с чем я пытался работать сначала, и только в качестве последней меры переключился на save(). Благодарим за помощь! –

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