2012-04-14 14 views
23
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é il "errore" né "nessun errore" vengono stampati sul terminale. Inoltre, la connessione non sembra avere un "errore". Ho confermato che MongoDb è in esecuzione.Mongoose.js instance.save() callback non attivo

risposta

60

questo è un caso in cui si aggiunge il modello all'oggetto mangusta globale ma si apre una connessione separata mongo.createConnection() di cui non fanno parte i modelli. Poiché il modello non ha alcuna connessione, non può salvare sul db.

questo è risolto sia collegando al mongo sulla connessione mangusta globale:

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

o aggiungendo i vostri modelli alla connessione separata:

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

Grazie @aaronheckmann! – LDK

+2

Grazie, inviato una correzione al tutorial di mongoosejs.com. –

+0

@aaronheckmann, quando si cambia 'mongo.model' in' connection.model' si ottiene 'TypeError: Undefined type in 'paths.login' Hai provato a nidificare gli schemi? Puoi annidare solo usando ref o array. –

0

La risposta postato 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' 
}}); 
Problemi correlati