Подтвердить что ты не робот

Mongoose.js instance.save() callback не срабатывает

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

В терминал не выводится ни "ошибка", ни "ошибка". Более того, похоже, что connection.on 'error' тоже не срабатывает. Я подтвердил, что MongoDb работает.

4b9b3361

Ответ 1

Это случай, когда вы добавляете модель в глобальный объект mongoose, но открываете отдельное соединение mongo.createConnection(), в котором модели не являются частью. Поскольку модель не имеет связи, ее нельзя сохранить в db.

это решается либо путем подключения к mongo на глобальном соединении мангуста:

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

или добавив свои модели в свое отдельное соединение:

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

Ответ 2

Опубликованный ответ не решает проблему. К сожалению, я не могу просто обновить свою базу данных, так что это не решение для меня. Но здесь я нашел решение этой проблемы: https://github.com/Automattic/mongoose/issues/4064

Просто используйте .$__save вместо .save, как показано:

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