如果使用 RestSerializer,就不能使用速记路由处理程序? (余烬-cli-海市蜃楼)
Posted
技术标签:
【中文标题】如果使用 RestSerializer,就不能使用速记路由处理程序? (余烬-cli-海市蜃楼)【英文标题】:Not possible to use shorthand route handlers if RestSerializer is used? (ember-cli-mirage) 【发布时间】:2017-09-28 09:05:41 【问题描述】:我设置了一个简单的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 时,一切都在使用速记 (mirage/config.js
) 并且我能够更新模型,但在我的情况下,我必须在响应中使用带有序列化 ID 的 RESTSerializer
。
我发送模型的attrs
时的请求有效负载在属性名称的末尾没有Id
,f.e.:
// 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? 那会很伤心,但至少那时我会知道。
感谢您的支持!
【问题讨论】:
我不知道答案,但您可能需要记下您要使用的 mirage 版本。 我想使用一个支持工厂和自动模型检测的版本。但是当我尝试包含这两个功能的第一个版本时,它的行为也与我上面描述的一样。 【参考方案1】:简短的回答:看起来您现在需要自定义序列化程序,直到它的错误修复被合并。
长答案:该问题看起来是在 Mirage 的 0.2 -> 0.3 升级中出现的问题,可能是因为 Mirage 中进行了基础数据库更改。它可能会得到修复,但现在你需要解决它。
【讨论】:
以上是关于如果使用 RestSerializer,就不能使用速记路由处理程序? (余烬-cli-海市蜃楼)的主要内容,如果未能解决你的问题,请参考以下文章
Ember cli mirage 错误:补丁处理程序无法读取 null 的属性更新