Mongoose.js instance.save () callback non attivo

var mongo = require('mongoose'); var connection = mongo.createConnection('mongodb://127.0.0.1/test'); connection.on("error", function(errorObject){ console.log(errorObject); console.log('ONERROR'); }); var Schema = mongo.Schema; var BookSchema = new Schema({ title : {type : String, index : {unique : true}}}); var BookModel = mongo.model('abook', BookSchema); var b = new BookModel({title : 'aaaaaa'}); b.save( function(e){ if(e){ console.log('error') }else{ console.log('no error') }}); 

Né “errore” né “nessun errore” vengono stampati sul terminale. Inoltre, la connessione non sembra avere un “errore”. Ho confermato che MongoDb è in esecuzione.

questo è un caso in cui si sta aggiungendo il modello all’object globale mongoose ma si apre una connessione separata mongo.createConnection() cui i modelli non fanno parte. Poiché il modello non ha alcuna connessione, non può salvare sul db.

questo è risolto collegandosi a mongo sulla connessione globale di mangusta:

 var connection = mongo.createConnection('mongodb://127.0.0.1/test'); // becomes var connection = mongo.connect('mongodb://127.0.0.1/test'); 

o aggiungendo i tuoi modelli alla tua connessione separata:

 var BookModel = mongo.model('abook', BookSchema); // becomes var BookModel = connection.model('abook', BookSchema); 

La risposta inviata non risolve il problema. Sfortunatamente, non posso semplicemente aggiornare il mio database, quindi non è una soluzione neanche per me. Ma qui ho trovato una soluzione a questo problema: https://github.com/Automattic/mongoose/issues/4064

Basta usare .$__save invece di .save come mostrato:

 var b = new BookModel({title : 'aaaaaa'}); b.$__save({}, function(e){ if(e){ console.log('error') // callback will show if e exists }else{ console.log('no error') // callback will show 'no error' }});