我设置了一个简单的Ember Twiddle来向您显示我在尝试更新模型时发生的错误。
我使用ember-cli-mirage
来模拟数据是相当可观的。
根据文档,我创建了一个应该处理PUT请求的速记路由。
确实如此,但错误:Your handler for the url /api/shops/1 threw an error: Cannot convert undefined or null to object
使用JSONAPISerializer时,所有内容都使用了shorthands(mirage/config.js
),我可以更新模型,但在我的情况下,我必须在响应中使用带有序列化ID的RESTSerializer
。
我发送模型attrs
时的请求有效负载在属性名称的末尾没有Id
,例如:
// attrs object in PUT request
{
name: "Shop 1",
city: "1" // belongsTo relationship,
}
现在Mirage试图在相应的数据库模型上找到那些必须更新的属性,但找不到它,因为在数据库中它是cityId
而不仅仅是city
...
我也发现了这个issue report并且它正在发挥作用,但我希望我可以避免这样的事情。据我所知,在之前版本的ember-cli-mirage(v0.1.x)中,也不需要覆盖序列化器中的normalize方法,以便能够使用带有serializedIds的RestSerializer ...
我的问题是: 有没有办法坚持使用速记路由处理程序,或者我是否真的必须编写帮助程序或其他自定义解决方案只是因为我必须使用RestSerializer? 那真的很难过,但至少我当时就知道了。
感谢您的支持!
答案 0 :(得分:0)
简短回答:现在看起来您需要自定义序列化程序,直到它的错误修复程序合并为止。
答案很长:该问题看起来是0.2 - >中出现的问题。 Mirage升级0.3,可能是因为Mirage中的基础数据库更改。它可能会得到修复,但现在你需要解决它。