我正在使用Express和TypeORM,目前我遇到了以下情况:
在插入或更新记录之前,我总是希望将用户名设置为当前记录,以保留上次更新此记录的信息。
使用TypeORM,可以通过使用订阅者轻松完成:
@EventSubscriber()
export class Subscriber implements EntitySubscriberInterface {
beforeUpdate(event: UpdateEvent<any>) {
const entity = event.entity;
if(entity instanceof Base) {
entity.lastUpdatedBy = 'username'; // TODO
}
}
}
用户在成功通过身份验证后就知道了:
@Put('/entity')
public updateEntity(@CurrentUser({required: true}) user: User, @Body enity: Entity): Promise<Entity> {
Log.info('User successfully authenticated: ' + user)
return this.manager.update(entity);
}
我的问题是:在请求范围内存储和访问用户信息的最简单方法是什么?
到目前为止我发现了什么:
还有其他选择吗?
答案 0 :(得分:0)
我使用以下npm软件包将用户保存在我的请求范围内:https://www.npmjs.com/package/cls-hooked。
此软件包对我不起作用,因为似乎不支持异步/等待:continuation-local-storage。
答案 1 :(得分:0)
您可以使用 SaveOptions 的 any 类型的属性数据。
@Put('/entity')
public updateEntity(@CurrentUser({required: true}) user: User, @Body enity: Entity): Promise<Entity> {
Log.info('User successfully authenticated: ' + user)
return this.manager.update(entity, {data: user});
}
然后,您可以将Subscriber中的数据用于:
event.queryRunner.data