【发布时间】:2013-12-29 19:47:57
【问题描述】:
我正在尝试传递一个参数以在 mongoose 模型上预先保存中间件,例如:
subject.save({ user: 'foo', correlationId: 'j3nd75hf...' }, function (err, subject, count) {
...
});
它被传递给两个预保存中间件
第一:
schema.pre('save', function (next) {
// do stuff to model
if (arguments.length > 1)
next.apply(this, Array.prototype.slice.call(arguments, 1));
else
next();
});
然后:
schema.pre('save', function(next, metadata, callback) {
// ...
// create history doc with metadata
// ...
history.save(function(err, doc) {
if(err) throw err;
if (typeof metadata == 'object')
next(callback);
else
next();
});
});
它不适用于保存从数据库中获取的现有模型,但它适用于新创建的模型。
如果我删除参数它确实有效。
所以如果我打电话...
subject.save(function (err, subject, count) {
...
});
...它确实有效。
看起来回调从未真正回调过。所以也许它假设第一个参数是 save() 更新的回调。
对于创建,它确实可以传递参数
(new models.Subject(subjectInfo)).save({ user: user, correlation_id: correlationId }, function (err, subject, count) {
if (err) throw err;
...
});
关于为什么它适用于创建时的 save() 而不是更新时的 save() 有什么想法吗?
谢谢!!
【问题讨论】: