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 работает.
Ответы
Ответ 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'
}});