Jas*_*son 2 typescript typeorm
我有一个使用 TypeORM 的 NodeJS 后端服务器,每次更新实体时我都需要执行插入。所以我的班级中有以下代码BaseModel
:
abstract class BaseModel {
// ...
@BeforeUpdate()
private async InsertBeforeUpdate() {
let entToSave: BaseModel;
// Create the entity that I want to insert
await getManager().save(entToSave);
}
}
Run Code Online (Sandbox Code Playgroud)
然后,在我的 DAL 中:
const saveUser = (user: User) => {
return new Promise((resolve, reject) => {
getManager().transaction(async manager => {
manager
.save(user)
.then(() => {
resolve('yay');
})
.catch(() => {
reject(new Error('boo'));
});
});
});
};
Run Code Online (Sandbox Code Playgroud)
然而,这带来了一个问题。如果保存操作失败并且 saveUser Promise 被拒绝,则 @BeforeUpdate 中执行的插入在同一事务上不存在,并且将保存到数据库。
如何在 @BeforeUpdate 侦听器函数中访问所述事务管理器?
您可以使用 aSubscriber
代替 a ,您可以在订阅者的 TypeORM 文档Listener
中找到更多信息。然后您应该将订阅者添加到您的(请参阅此处的配置)connectionOptions
例如,要将当前的钩子转换为订阅者,可以按如下方式声明它:
@EventSubscriber()
export class UserSubscriber implements EntitySubscriberInterface<User> {
listenTo() {
return User;
}
async beforeUpdate(event: UpdateEvent<Person>) {
const entToSave = new WhateverEntity();
// This will give you access to original manager, and so same transaction
await event.manager
.save(entToSave);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3807 次 |
最近记录: |