LoopBack Angular SDK的upsert在PATCH中包含ID,导致错误

时间:2017-02-09 19:01:29

标签: angularjs mongodb loopbackjs

我使用我设置的LoopBack 3 API生成的Angular SDK,但在生成的$save()上遇到了$resource方法的问题。此方法映射到upsert操作,该操作本身映射到patchOrCreate。问题是在调用$save()时将整个模型对象发送到PATCH API,包括模型的id。我使用MongoDB后端,并将idInjection设置为true,这意味着forceId也是如此。这会在$save()上引发以下错误:

  

请求PATCH / api / Foo的未处理错误?id = 58995169468d951cbf546ce4:ValidationError:Foo实例无效。详细信息:id无法设置(值:58995169468d951cbf546ce4)。

我可以通过将forceId设置为false来解决此错误,但这会打开安全问题。我还可以通过修改生成的服务文件并向使用PUT而不是PATCH的upsert添加真实$resource操作来解决此问题,并修改URL以包含id。这仍会触发有关ID的警告,但它可以正常工作并且不会引发任何错误。但是,编辑生成的代码不是我想要做的事情。

对此有什么正确的解决方案?我想使用$save()但仍然保持安全性,而不是编辑生成的文件。

1 个答案:

答案 0 :(得分:0)

在模型中设置" forceId":false,它将如下所示 {   " name":" Product",   " base":" PersistedModel",   " idInjection":是的,   " forceId":false, }

http://loopback.io/doc/en/lb3/3.0-Release-Notes.html#models-with-auto-generated-ids-reject-user-provided-id-values

查看更多信息