在我的猫鼬模型中,我有一些依赖于时间的stats
。我的想法是在模型加载后立即添加middleware来更改这些统计信息。
不幸的是,关于post
- Hooks的文档有点缺乏清晰度。好像我可以使用这样的钩子:
schema.post('init', function(doc) {
doc.foo = 'bar';
return doc;
});
他们唯一的例子涉及console.log
- 输出。它没有以任何方式解释是否必须返回doc
或者后挂钩中的更改根本不可能(因为它不是异步的,因此对于复杂的想法可能没什么用处)。 p>
如果pre
上'init'
不是在加载时自动更新模型的正确方法,那么它是什么?
答案 0 :(得分:17)
这是我们如何在加载时更新模型,异步工作:
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();
});