Node.js 续集挂钩,以任何方式获得Express';用户?
我正在使用Sequelize和hooks(请参见此处:)。我正在尝试实现一种日志系统,并且更喜欢在钩子上而不是在控制器中登录。有人对如何将我的用户从req.user转换到hooks函数有什么想法吗Node.js 续集挂钩,以任何方式获得Express';用户?,node.js,express,sequelize.js,Node.js,Express,Sequelize.js,我正在使用Sequelize和hooks(请参见此处:)。我正在尝试实现一种日志系统,并且更喜欢在钩子上而不是在控制器中登录。有人对如何将我的用户从req.user转换到hooks函数有什么想法吗 db.define('vehicle', { ... }, { hooks: { beforeUpdate: function(values, cb){ // Want to get my user in here. }
db.define('vehicle', {
...
}, {
hooks: {
beforeUpdate: function(values, cb){
// Want to get my user in here.
}
}
});
如果用户和车辆之间存在一对多关系,并且如果车辆实例已与用户关联,则可以使用Vehicle.getUser() 如果车辆的一个属性是uid,则为
beforeUpdate: function(vehicle,cb){
User.find(vehicle.uid)
.then(function(user){
console.log(user)
})
}
否则,必须在控制器中执行此操作。有没有一个很好的理由不在控制器中处理这个问题?在Vehicle上创建一个名为logUser()并接受req.user的类方法似乎是阻力最小的路径。尽管这是一个老问题,但下面是我的答案。问题是如何将当前用户从您的请求转移到钩子中。这些步骤可能使您能够做到:
instance.context.user
将可用
User.addHook("afterUpdate", function(instance){
if(instance.context && instance.context.user){
console.log("A user was changed by " + instance.context.user.id);
}
});
addHook(“afterUpdate”),函数(实例){
if(instance.context&&instance.context.user){
log(“用户被“+instance.context.user.id”更改);
}
});
您可以在这里找到这个过程被提取到express中间件中(我是创建者)。我在项目中使用了一个简单的解决方案 1) 首先,在创建或更新任何模型时,在选项参数中传递数据,如下所示:
model.create({},{ user: req.user}); // Or
model.update({},{ user: req.user});
2) 然后,访问钩子中的数据
User.addHook("afterUpdate", function(instance, options){
console.log(' user data', options.user);
});
接受,甚至是去年提出的很难的问题,但它并没有真正回答问题。我正在检查这个解决方案。为您提供信息,我使用TypeScript编写了一个错误
Object literal可能只指定已知属性,而类型“CreateOptions”中不存在“authInfo”。
有什么建议吗?我使用“`declare module”sequelize”{interface CreateOptions{authInfo?:Any;}接口更新选项解决了这个问题{authInfo?:any;}接口保存选项{authInfo?:any;}接口BulkCreateOptions{authInfo?:any;}```
model.create({},{ user: req.user}); // Or
model.update({},{ user: req.user});
User.addHook("afterUpdate", function(instance, options){
console.log(' user data', options.user);
});