我正在开发我的第一个Ember应用程序,并通过从model()
返回静态JSON对象的路由让它以我想要的方式显示:
element: {
name: "First Element",
divisions: [{
name: "First Division",
sets: [{name: "Set 1"},{name: "Set 2"},{name: "Set 3"}]
}, {
name: "Second Division",
sets: [{name: "Set 1"},{name: "Set 2"},{name: "Set 3"}]
}]
}
现在,我正在尝试重构以使用EmberData+Mirage,并度过了一段糟糕的时光。
这是我的路线
export default Ember.Route.extend({
model() {
return this.store.find('element', 1);
},
如果我这样设置幻影m1n2:
this.get('/elements', function() {
return {
elements: [
{
id: 1,
name: 'First Element',
divisions: [1, 2]
}
]
}
});
然后我得到这个错误:
Your Ember app tried to GET '/elements/1', but there was no route defined to handle this request.
如果我这样设置幻影m1n1:
this.get('/elements/1', function() {
return {
id: 1,
name: 'First Element',
divisions: [1, 2]
}
});
然后我得到这个错误:
22:46:40.883 "Error while processing route: index" "Assertion Failed: normalizeResponse must return a valid JSON API document:
* One or more of the following keys must be present: "data", "errors", "meta"." "EmberError@http://localhost:4200/assets/vendor.js:25582:15
编辑:
因此,这并不是解决问题的办法,但它让我度过了难关。我放弃了Pretender,根据这个优秀的教程:http://emberigniter.com/modern-bridge-ember-and-rails-5-with-json-api/,重新开始创建一个真正的Rails服务器
我可以用这种方式做我想做的一切,如果我想把它变成一个制作应用程序,我就更接近了。
2条答案
按热度按时间zdwk9cvp1#
所以问题是,您实际上没有遵守JSON API规范。你可以通过阅读how to conform上的Mirage页面来解决这个问题。
实际上,在
GET /foo/1
调用的情况下,您需要在JSON响应的顶层返回一个对象。您还需要将GET /foo
的“elements”属性更改为“data”,这样就可以了。目前还没有一种简单的、可重复使用的方法来实现这种开箱即用的幻影。对于这两个问题,现在最好的选择是使用本期中提出的解决方案。vaj7vani2#
成员错误
normalizeResponse must return a valid JSON API document
可以通过三种方式固定
返回有效的JSONAPI响应
查看错误消息:
normalizeResponse必须返回有效的JSON API文档:
另请参见https://jsonapi.org/examples/
规范化所有响应
问题:错误处理
通过将所有响应 Package 在
{ data: ... }
中,它们永远不会返回错误对于错误,响应应该是
另请参见https://jsonapi.org/format/#error-对象
用REST替换JSONAPI
成员文档:adapters和serializers
副本:How can ember application be integrated to use with json-server?