Ember Data findAll() causing "TypeError: Cannot read property 'type' of undefined"

Ember Data findAll() causing "TypeError: Cannot read property 'type' of undefined"

将我的第一个模型连接到我的后端并在调用 Ember Data 的 findAll()

时出现以下错误
TypeError: Cannot read property 'type' of undefined

路线,

import Ember from 'ember';

export default Ember.Route.extend({
    model() {
        this.store.findAll('restaurant');
    }
});

模型,

import DS from 'ember-data';

export default DS.Model.extend({
    name: DS.attr()
});

我可以看到 Ember 正在访问我的本地服务器并从正确的 url、

返回格式正确的 JSON
{  
    "restaurants": {  
        "id":1,
        "name":"Restaurant Name"
    }
}

我看到过类似的问题,但这通常与格式不正确有关 JSON。

默认数据格式 Ember 使用的数据是 JSON API 所以您的数据应该如下所示,

{
  "data": {
    "id": "1",
    "type": "restaurants,
    "attributes": {
      "name": "Name"
    }
  }
}

使 Ember 数据满足您的需求,而不改变后端生成数据的格式。您可以添加自己的适配器,用于将您的 Ember 数据请求传输到正确的请求。

在下面的 link 阅读有关适配器的更多信息,

https://guides.emberjs.com/v2.6.0/models/customizing-adapters/

您的 JSON 文件格式类似于 REST API 响应,但默认情况下 Ember 使用 JSONAPI 适配器。

首先修复JSON,它应该return一个数组:

[{  
  "id":1,
  "name":"Restaurant Name"
}]

然后更改适配器并配置序列化程序:

// in app/adapters/application.js

import Ember from 'ember';
import DS from 'ember-data';

export default DS.RESTAdapter.extend({
})


// in app/serializers/application.js

import Ember from 'ember';
import DS from 'ember-data';

export default DS.JSONSerializer.extend({
})

阅读更多:

Customizing adapters

JSONAPIAdapter

RESTAdapter