交易承诺一个简单的保证:要么是一切承诺,要么是一无所有。
然而,在一个有寄存层的 NestJS 应用程序中,完全可以运行一个没有出错的回滚,然后在数据库中找到一行仍然坐着,应该随它一起消失.
这不是 TypeORM 或 PostgreSQL 错误 。
其中的一个存放处从未在交易中,因为停止被往上三层传递。
没有例外,也没有警告,测试通过是因为那个仓库被嘲笑了.
这篇文章描述了如何使这一类失败成为不可能:交易在一个单一点——处理请求的控制器——开启,而寄存器在进行中的交易中招募自己,而没有收到任何参数.
大约60条线建在...
第二部分是很少讲到的:交易边界的三个后果,每个后果都有固定的.
交易内部的网络呼叫 拥有集合连接 以及整个等待的锁 记录中记录的失败与它本来要记录的失败一样被卷回。
而"筑巢"两次通话并不开启"筑巢"的交易,而是两个独立的交易,带有允许的自死锁.
问题:通过手通过实体经理TypeORM提供这样的交易: 对于一个小项目来说,这是一个正确的答案,不需要更多的答案。
一旦存在寄存层,问题就会出现.
这就是交易:如果寄存器不使用该管理器,则其查询会运行在不同的连接上,最终会出现在交易之外.
寂然而去,而无出错而无出警告.
退后完全不会退后。
所以经理必须到达寄存器,它只能通过手递到达.
应用程序层的使用大小写会是这样的: 对.,即宣布端口并活在域层的界面的影响如下: 此界面生活在域层.
将它放在那里的原因是,这个域宣布它需要什么,而不知道什么是持续存在的。
现在它从...
由此,端口停止为一:如果不拖动ORM,它就无法再被执行了,从您用来测试应用层的内膜双层开始.
根本问题不是美学 这携带着系统的正确性,是看不见的:不通过一个服务的一个分支内的一个电话,就足以使该写作落入交易之外.
它通过代码审查。
它通过测试 嘲笑仓库。
它在生产过程中会出现类似这个的症状, 比如说:一个半失败的操作, 离开一个用户行,而不需要匹配的设置行。
第二种选择——不进行交易——一无所获。
它只把问题推迟到两个相关的写作出现分歧的时候。
然后是目标:没有TypeORM类型的域端口.
交易边界在入口处申报一次。
仓库,在现行交易中自征入伍,在没有交易时行为相同。 "忘记通过某事"不再可能是一个错误,因为没有任何东西被通过.
Async LocalStorage节点自v12起开始发运.
它从本地存储到同步调用链:一个值被设置在根上,其下的任何函数——在任何深度,跨越每一个——都可以读取而无需作为论据.
对上述问题,形状如下: 该商店的范围为同步上下文,而不是全局变量.
两个HTTP同时请求各自持有自己,不受干扰,在读取返回之外。
那块地产才是安全的 这一描述完全吻合:整个呼叫链都需要,不属于中间层。
解决方案:交易执行者住在项目共享的基础设施中.
这是45行,除了TypeORM之外没有依赖性