【问题标题】:Cannot read property 'type' of undefined无法读取未定义的属性“类型”
【发布时间】:2016-04-30 11:39:11
【问题描述】:

我尝试将我的应用程序设置为 ember@2.5.0,但每次我使用商店并尝试使用时

this.store.findAll("user");

我总是收到无法读取未定义的属性“类型”的错误。

也初始化了存储、适配器以及模型和服务器。

适配器/application.js

import JSONAPIAdapter from 'ember-data/adapters/json-api';
export default JSONAPIAdapter.extend({
    defaultSerialiser: "-default"
});

models/user.js

import Model from 'ember-data/model';
import attr from 'ember-data/attr'
export default Model.extend({
    "name": attr()
});

和服务器端是一样的

app.get("/users", function(req, res) {
    res.send({"name": "Surya"});
});

遇到错误

TypeError: Cannot read property 'type' of undefined
at _pushInternalModel (store.js:1524)
at push (store.js:1501)
at finders.js:148
at Object.Backburner.run (ember.debug.js:678)
at _adapterRun (store.js:1733)
at finders.js:145
at tryCatch (ember.debug.js:53806)
at invokeCallback (ember.debug.js:53821)
at publish (ember.debug.js:53789)
at ember.debug.js:32054

【问题讨论】:

  • 你的适配器有错字,它应该是“defaultSerializer”而不是“defaultSerializer”,而且序列化器的名称对我来说也有问题(除非你实际上将你的序列化器命名为 -default.js)。如果您尝试使用默认序列化程序,那么我假设您不必在适配器中指定它。但是从您提供的响应来看,正如@Lux 提到的,如果您真的想使用 jsonapi,您应该更改有效负载格式。
  • 你没有返回 jsonapi 格式,你返回的是 RESTAdapter/RESTSerializer 格式,你返回的是单个用户,但是你请求了一个用户集合。

标签: ember.js ember-data ember-cli


【解决方案1】:

您使用 JSONAPI 序列化程序和适配器,但您的响应

{
  "user": {
    "name": "Surya"
  }
}

不是有效的JSONAPI 响应。应该是

{
  "data": {
      "type": "user",
      "id": "0",
      "attributes": {
        "name": "Surya"
      }
  }
}

【讨论】:

  • 抱歉,我需要将响应作为简单的 JSON 发送,而且我只能有那种数据。但我也试着给这个。但是还是有同样的错误。
  • 然后使用另一个序列化器/适配器或自己编写。
  • 你应该使用 REST 适配器和序列化器来处理这种类型的响应,它包含在 Ember 中。
猜你喜欢
  • 2021-11-20
  • 2019-06-03
  • 2017-02-08
  • 2021-01-15
  • 2020-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多