我有一个使用node.js和nestJs编写的服务器端,使用typeorm进行查询。
我正在尝试像这里建议的那样,将一些对数据库的查询包装在事务中,并受到typeorm 文档的启发,做了一些更改,如下所示:
getManager().transaction(async transactionalEntityManager => {
transactionalEntityManager.save<Entity>(newEntity)
transactionalEntityManager.save<Entity1>(newEntity1)
});
交易运作良好,如果出现错误,则回滚数据库。 测试方式如下:
getManager().transaction(async transactionalEntityManager => {
transactionalEntityManager.save<Entity>(newEntity)
throw 'There is an error'
transactionalEntityManager.save<Entity1>(newEntity1)
});
事务的执行在GraphQL Mutation中进行,因此如果出现问题,我应该向客户端返回错误。但问题是,我无法捕获事务中的错误。
尝试这样做:
@Mutation(returns => Entity)
async create(): Promise<Entity> {
let entity = null;
let error = null;
getManager().transaction(async transactionalEntityManager => {
try {
entity = await transactionalEntityManager.save<Entity>(newEntity)
await transactionalEntityManager.save<Entity1>(newEntity1);
} catch (err) {
error = err
}
})
if (error) {
return error
}
return entity
}
当我抛出错误时,我能够成功捕获它,但是当真正的错误发生时,虽然我可以在服务器上使用console.log()
打印它,但它从未传递回客户端。