有没有更好的方法来监听 Mongoose 模型上的事件?

问题描述 投票:0回答:2

创建连接后,将运行此函数:

function setupModelListenersForConnection(c){
    var Job = c.model('Job');
    Job.addListener('created', function(jobInstance){
    });
    console.log('Models have been wired!');
}

在工作架构中我有这样的:

JobSchema.post('save', function(next){
  this.db.models.Job.emit('created', this);
})

我不太喜欢的是

this.db.models.Job
,我认为有更好的方法来做到这一点;)非常感谢

为什么我需要它?

想象一下创造了一份工作。我想更新工作人员并设置其当前工作和新状态(忙碌)。

我喜欢将模型解耦,这样 Job 模型就不必知道 Worker 模型。只知道有关工人的一些详细信息,如 ID 和姓名。

mongoose events listener
2个回答
1
投票

这就是 mongoose-lifecycle 的作用

JobSchema.post('save', function(next){
  var model = this.model(this.constructor.modelName);
  model.emit('created', this);
})

0
投票
export default function connection(mongoose, config, options) {
function connectToMongo() {
  mongoose
    .connect(config.mongo.uri, options)
    .then(
      () => {},
      (err) => {
        console.info('Mongodb error', err);
      }
    )
    .catch((err) => {
      console.log('ERROR:', err);
    });
}

mongoose.connection.on('connected', () => {
  console.info('Connected to MongoDB!');
});

mongoose.connection.on('reconnected', () => {
  console.info('MongoDB reconnected!');
});

mongoose.connection.on('error', (error) => {
  console.error(`Error in MongoDb connection: ${error}`);
  mongoose.disconnect();
});

mongoose.connection.on('disconnected', () => {
  console.error(
    `MongoDB disconnected! Reconnecting in ${
      options.reconnectInterval / 1000
    }s...`
  );
  setTimeout(() => connectToMongo(), options.reconnectInterval);
});

return {
  connectToMongo
};

}

© www.soinside.com 2019 - 2024. All rights reserved.