2012-04-14 6 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') 
}}); 

Weder "Fehler", noch "kein Fehler" werden auf dem Terminal gedruckt. Was mehr ist die Verbindung.auf "Fehler" scheint auch nicht zu feuern. Ich habe bestätigt, dass MongoDb läuft.mongoose.js instance.save() Callback nicht feuern

Antwort

60

In diesem Fall fügen Sie das Modell dem globalen Mungo-Objekt hinzu, öffnen aber eine separate Verbindung mongo.createConnection(), zu der die Modelle nicht gehören. Da das Modell keine Verbindung hat, kann es nicht in der Datenbank gespeichert werden.

wird dies entweder gelöst, indem auf der globalen Mungo Verbindung Mongo verbindet:

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

oder durch Ihre Modelle auf Ihre separate Verbindung hinzufügen:

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

Dank @aaronheckmann! – LDK

+2

Vielen Dank, eine Korrektur an mongoosejs.com's Tutorial gesendet. –

+0

@aaronheckmann, wenn 'mongo.model' in' connection.model' geändert wird, bekomme ich 'TypeError: Undefinierter Typ unter 'paths.login' Haben Sie versucht, Schemas zu verschachteln? Sie können nur mit Refs oder Arrays verschachteln. –

0

Die entsandte Antwort löst nicht das Problem . Leider kann ich meine Datenbank nicht einfach aufrüsten, das ist für mich auch keine Lösung. Aber auch hier fand ich eine Lösung für dieses Problem: https://github.com/Automattic/mongoose/issues/4064

Verwenden Sie einfach .$__save statt .save wie gezeigt:

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' 
}}); 
Verwandte Themen