Обратный вызов Mongoose.js instance.save () не запускается

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

Ни «ошибка», ни «нет ошибки»; распечатаны на терминал. Что больше является ошибкой подключения. похоже, тоже не стреляет. Я подтвердил, что MongoDb работает.

Ответы на вопрос(3)

я не могу просто обновить свою базу данных, так что это тоже не решение для меня. Но тут я нашел решение этой проблемы: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'
}});
Решение Вопроса

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

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

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);
 LDK24 апр. 2012 г., 00:05
Спасибо @aaronheckmann!
 28 мар. 2014 г., 13:32
@aaronheckmann, при сменеmongo.model вconnection.model я получилTypeError: Undefined type at 'paths.login' Did you try nesting Schemas? You can only nest using refs or arrays.
 19 мая 2013 г., 00:51
Спасибо, отправили исправление в учебник mongoosejs.com.
 26 мар. 2017 г., 08:18
Обновление mongoose до 4.x.x работало на меня
 16 нояб. 2015 г., 14:53
если этот ответ не работает: update mongoose; у меня работало обновление с 3.8 до 4.2 (с MongoDB 3.0.4)

и благодаря ему я сейчас нахожусь на пути к решению проблемы ... хотя я еще не там! Вот мой конкретный вопрос:

Я хочу, чтобы моя схема и модели были определены в отдельных файлах, чтобы я мог повторно использовать их от проекта к проекту. Так что в качестве примера у меня есть файл с именемW8DBItem.js следующее:

var mongoose = require('mongoose');
var itemSchema = new mongoose.Schema({ name: {type: String, required: true}});
module.exports = mongoose.model('W8DBItem', itemSchema);

В моем программном файле я делаю это так:

var mongoose = require('mongoose');
var W8DBItem = require('../w8/W8DBItem.js'); 
var dbURL ='mongodb://localhost:27017/default';
var mongoOptions = { useNewUrlParser: true, bufferCommands: false }
mongoose.connect(dbURL, mongoOptions);

var db = mongoose.connection;

// DEAL WITH CONNECTION ERROR
db.on('error', console.error.bind(console, 'connection error:'));

// PREP DATA
var aWeight = { name: "My Test Name" };
var newWeightItem = W8DBItem(aWeight);

// CONNECTION ESTABLISHED
db.once('open', function() {
    console.log("Here 1")

    // TRY TO SAVE
   newWeightItem.save(function (err, newWeightItem) {
    if (err) { 
        console.log("Here 2");
        console.log(err);
    }
    else {
        console.log("Here 3");
        console.log(newWeightItem);
    }
  });
});

Когда я запускаю эту программу, я получаю «Здесь 1» но никогда "Здесь 2" или "Здесь 3" в консоли.

Из поста Аарона я узнал, что объект W8DBItem не имеет связанных (и открытых) соединений, но я не уверен, как что-то исправить. Я мог бы подключиться к БД вW8DBItem.js файл, но я действительно не люблю жестко кодировать информацию о сервере с объектами - я хочу, чтобы эти объекты использовались в разных файлах и, возможно, на разных серверах.

Идеи и предложения очень ценятся!

[РЕДАКТИРОВАТЬ: РЕШЕНИЕ НАЙДЕНО !!!]

Вместо того, чтобы экспортировать мой mongoose.model из моего объектного файла, я только экспортирую схему:

var mongoose = require('mongoose');
var itemSchema = new mongoose.Schema({name: {type: String, required: true}});
module.exports = itemSchema;

Затем в своих программных файлах я делаю это:

var itemSchema = require('../w8/W8DBItemSchema.js'); 
...

var W8DBItem = db.model('W8DBItem', itemSchema);
var newWeightItem = W8DBItem(aWeight);
...

Работает как шарм. Я надеюсь, что это помогает кому-то!

Ваш ответ на вопрос