12

在我的猫鼬模型中,我有一些stats依赖于时间。我的想法是在模型加载后立即添加一个中间件来更改这些统计信息。

不幸的是,关于post-Hooks 的文档有点不够清晰。看来我可以使用这样的钩子:

schema.post('init', function(doc) {
    doc.foo = 'bar';
    return doc;
});

他们唯一的例子涉及console.log- 输出。它没有以任何方式解释是否doc必须返回或者根本不可能更改 post-Hook(因为它不是异步的,复杂的想法可能几乎没有用处)。

如果preon'init'不是在加载时自动更新模型的正确方法,那是什么?

4

1 回答 1

21

这就是我们如何在加载时更新模型,异步工作:

schema.pre('init', function(next, data) {
  data.property = data.property || 'someDefault';
  next();
});

Pre-init 比较特殊,其他钩子的签名略有不同,例如 pre-save:

schema.pre('save', function(next) {
  this.accessed_ts = Date.now();
  next();
});
于 2013-02-04T19:39:13.947 回答