如果使用 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 的属性更新

datastudio调试不能用

vpn一到10月就不能用

为啥我在c编程中不能成功使用return选项?

请简要分析一下为啥单周期CPU中的功能部件一般不能共享使用?

jdbcTemplate必须使用spring事务吗 否则不能提交