从Ember Data返回承诺时出错

ed9*_*133 5 ember.js ember-data ember-cli-mirage

我正在开发我的第一个Ember应用程序并让它以路径返回静态JSON对象来显示我想要的方式model():

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"}]
  }]
}
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试重构使用Ember Data + Mirage并且度过了一段糟糕的时光.

这是我的index.js路线

export default Ember.Route.extend({
    model() {
        return this.store.find('element', 1);
    },
Run Code Online (Sandbox Code Playgroud)

如果我config.js像这样设置我的幻影:

  this.get('/elements', function() {
    return {
      elements: [
          {
            id: 1,
            name: 'First Element',
            divisions: [1, 2]
          }
      ]
    }
  });
Run Code Online (Sandbox Code Playgroud)

然后我收到这个错误:

Your Ember app tried to GET '/elements/1', but there was no route defined to handle this request.
Run Code Online (Sandbox Code Playgroud)

如果我config.js像这样设置我的幻影:

  this.get('/elements/1', function() {
    return {
       id: 1,
       name: 'First Element',
       divisions: [1, 2]
    }
  });
Run Code Online (Sandbox Code Playgroud)

然后我收到这个错误:

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
Run Code Online (Sandbox Code Playgroud)

编辑:

所以这不是所述问题的解决方案,但它让我超越了这一点.我放弃了Pretender,并根据这个优秀的教程再次开始创建一个实际的Rails服务器:http://emberigniter.com/modern-bridge-ember-and-rails-5-with-json-api/

我能够以这种方式做我想做的一切,如果我想把它变成一个生产应用程序,我就更接近了.

Der*_*ing 4

所以问题是你实际上并没有遵守JSON API规范。您可以通过阅读 Mirage 的有关如何符合的页面来解决此问题。

本质上,您需要在调用时在 JSON 响应的顶层返回一个对象GET /foo/1。您还需要将“元素”属性更改为“数据” GET /foo,这应该可以解决问题。目前还没有一种简单、可重复使用的方法来开箱即用地实现 Mirage。目前解决这两个问题的最佳选择是使用本期中提出的解决方案