【问题标题】:Mongoose find and findOne middleware not workingMongoose find and findOne 中间件不工作
【发布时间】:2015-06-03 06:02:21
【问题描述】:

如果有以下模式和中间件挂钩,但永远不会调用 findfindOne 挂钩。 saveupdate 挂钩按预期工作。根据Mongoose Middleware 文档,这应该是可用的。

// define the schema for our recs model
var recSchema = mongoose.Schema({
  dis: String,  // rec display
  mod: String   // modified date (HAYSTACK FORMAT)
}, {
  strict: false
});

// create the model for recs
var model = recsdb.model('recs', recSchema);

recSchema.pre('save', function(next) {
  this.mod = HDateTime.now(HTimeZone.UTC).toZinc();
  next();
});
recSchema.pre('update', function(next) {
  this.mod = HDateTime.now(HTimeZone.UTC).toZinc();
  next();
});
recSchema.pre('find', function() {
  console.log("Pre Find");
});
recSchema.pre('findOne', function() {
  console.log("Pre Find One");
});
recSchema.post('find', function() {
  console.log("Post Find");
});
recSchema.post('findOne', function() {
  console.log("Post Find One");
});

【问题讨论】:

  • 如何验证它不起作用?
  • 你有哪个猫鼬版本?
  • 根据您的评论更新以确保我使用的是 4.0.x。我现在正在使用 4.0.4,但仍然没有。我通过执行 find 和 findOne 验证它不起作用并且控制台中没有输出。
  • 您能否也提供实例化model 的代码?我目前的猜测是您不使用订阅事件的模式来创建模型。正如 robertklep 的要点
  • 在上面的代码中添加了架构

标签: node.js mongoose find middleware


【解决方案1】:

问题最终是项目的顺序。显然,您必须在设置查找挂钩后定义模型。但是,保存和更新挂钩不需要这样做。

// define the schema for our recs model
var recSchema = mongoose.Schema({
  dis: String,  // rec display
  mod: String   // modified date (HAYSTACK FORMAT)
}, {
  strict: false
});

recSchema.pre('save', function(next) {
  this.mod = HDateTime.now(HTimeZone.UTC).toZinc();
  next();
});
recSchema.pre('update', function(next) {
  this.mod = HDateTime.now(HTimeZone.UTC).toZinc();
  next();
});
recSchema.pre('find', function(next) {
  console.log("Pre Find");
  next();
});
recSchema.pre('findOne', function(next) {
  console.log("Pre Find One");
  next();
});
recSchema.post('find', function(doc) {
  console.log("Post Find");
});
recSchema.post('findOne', function(doc) {
  console.log("Post Find One");
});

// create the model for recs
var model = recsdb.model('recs', recSchema);

【讨论】:

  • 是的,如果您在从中构建模型后对架构进行了更改并且它可以工作,那么您很幸运。 :)
猜你喜欢
  • 2018-06-09
  • 2013-12-04
  • 2020-05-13
  • 2019-06-26
  • 1970-01-01
  • 2013-01-17
  • 2021-12-04
  • 2015-12-03
  • 2023-03-07
相关资源
最近更新 更多