Я новичок в koa.js, используя его с mongoose, и имею следующий сценарий: при запуске приложения я хочу загрузить json-файл и заполнить базу данных mongo содержимое json, если коллекция еще не существует с использованием мангуста. Я создал генераторную функцию loadMusicJSONIntoDB для обработки нагрузки и обернул эту функцию в co-блок с помощью app.listen, чтобы это произошло до начала работы сервера.koa.js mongoose check collection существует на сервере start
В нижеприведенном фрагменте я могу использовать listConnection мангуста после подключения к mongoose.connection.on ('open' ...), эта часть закомментирована. И я хочу проверить наличие коллекции Song, используя выход внутри loadMusicJSONIntoDB.
app.js:
var koa = require('koa');
var co = require('co');
var Song = require('./models/song');
var mongoose = require('mongoose');
// mongoose
var connection = mongoose.connect('localhost/test');
...
// Checking for collection exist like this works
// mongoose.connection.on('open', function() {
// mongoose.connection.db.listCollections({name: 'songs'})
// .next(function(err, collinfo) {
// if (collinfo) {
// console.log("songs collection exists")
// }
// });
// });
function *loadMusicJSONIntoDB() {
console.log("loadMusicJSONIntoDB");
var parsedMusicJSON = require('./music.json');
//console.log(parsedMusicJSON);
try {
// QUESTION: I would like to do a yield to wait for the connection
// to be established?
// songs = yield mongoose.connection.db.listCollections({name: 'songs'})
// .next(function(err, collinfo) {
// if (collinfo) {
// console.log(collinfo);
// console.log("songs collection exists")
// }
// });
// Would like to do the following only if the songs collection does not exist
for (var key in parsedMusicJSON) {
if (parsedMusicJSON.hasOwnProperty(key)) {
console.log(key + " -> " + parsedMusicJSON[key]);
result = yield Song.findOne({name: key});
//console.log(result);
if (!result) { // create record
var record = { name: key, tags: parsedMusicJSON[key]};
console.log(record);
yield Song.create(record);
}
}
}
} catch (err) {
console.log(err);
}
};
co(function*() {
yield loadMusicJSONIntoDB;
app.listen(3001, function() { console.log('listening on 3001') });
}).catch(function(err) {
console.error('Server boot failed:', err, err.stack);
});
song.js
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var SongSchema = new Schema({
name: String,
tags: []
});
module.exports = mongoose.model("Song", SongSchema);