我正在使用mongoose(在节点上),我正在尝试使用Mongoose中间件向模型添加一些额外的字段.
我正在考虑经常使用的情况,想要添加lastmodifiedsince-date.但是,我还想自动添加已完成保存的用户的名称/ profilelink.
schema.pre('save', function (next) {
this.lasteditby=req.user.name; //how to get to 'req'?
this.lasteditdate = new Date();
next()
})
Run Code Online (Sandbox Code Playgroud)
我正在使用护照 - http://passportjs.org/ - 这导致req.user存在,req当然是http请求.
谢谢
编辑
我已经定义pre了嵌入式模式,而我正在调用save嵌入式实例的父级.下面发布的解决方案(将arg作为保存的第一个参数传递)适用于非嵌入式案例,但不适用于我的案例.
您可以将数据传递给您的Model.save()调用,然后将其传递给您的中间件.
// in your route/controller
var item = new Item();
item.save(req, function() { /*a callback is required when passing args*/ });
// in your model
item.pre('save', function (next, req, callback) {
console.log(req);
next(callback);
});
Run Code Online (Sandbox Code Playgroud)
不幸的是,这对今天的嵌入式模式不起作用(参见https://github.com/LearnBoost/mongoose/issues/838).一种解决方法是将属性附加到父级,然后在嵌入式文档中访问它:
a = new newModel;
a._saveArg = 'hack';
embedded.pre('save', function (next) {
console.log(this.parent._saveArg);
next();
})
Run Code Online (Sandbox Code Playgroud)
如果您确实需要此功能,我建议您重新打开我上面链接的问题.
| 归档时间: |
|
| 查看次数: |
5708 次 |
| 最近记录: |