我正在使用MEAN堆栈。
例如,在我的角度代码中,我可能会:
Brand.create({name: 'name'}).then(function(brand){
//here, the product's referenced brand._id depends on the Brand response
Product.create({'name':'name', 'category': 'food',
'brand': brand.data._id}).then(function(res){
$scope.product = res.data;
});
});
在服务器端执行此操作会更好 - 如果有人在调用第二个承诺之前刷新或丢失连接,似乎只会创建一个品牌 - 没有相关产品。
如果是这样,最好的做法是将两个不同的集合连接到其各自的控制器中吗?
答案 0 :(得分:2)
在服务器端执行此操作会更好 - 如果有人这样做的话 在调用第二个promise之前刷新或丢失连接,似乎就是这样 可能导致只创建一个品牌 - 没有关联 产品
是。出于多种原因,最好在服务器端完成:
和。无论您在何处编写代码,都需要通过数据库中的某种事务系统或通过手动错误处理进行适当的错误处理,以便在以后的操作失败时解除先前的操作,这样您总是会得到一个有效的系统,即使是中间或后续步骤失败。在上面的客户端驱动方案中,您需要在.catch()
上使用Produce.create()
处理程序,因此如果失败,您可以从之前撤消Band.create()
,这样您就可以将系统保持在正常状态有一个下游错误。注意,如果您从客户端管理多个步骤,那么面对客户端连接问题几乎是不可能的,但是当您从服务器完成连接问题的可能性更小时更加实用。