簡體   English   中英

Ember.js JSON API混亂

[英]Ember.js JSON API confusion

我目前正在嘗試用Ember版本2.2.0和Ember Data 2.2.1創建一個簡單的Ember應用程序。 我創建了我的REST API以遵循JSON API規范v1.0,這是使用GET / articles檢索的資源數組的示例

{
  "links" : {
    "self" : "http://localhost:8080/test-app/rest/articles"
  },
  "data" : [
    {
      "id" : "5666157634499515eb7e13f0",
      "type" : "articles",
      "attributes" : {
        "title" : "test"
      }
    },
    {
      "id" : "5666157634499515eb7e13f1",
      "type" : "articles",
      "attributes" : {
        "title" : "test2"
      }
    },
    ...
  ]
}

我的文章路線看起來像這樣:

// routes/articles.js
...
export default Ember.Route.extend({
  model() {
    return this.store.findAll('article');
  }
});

和模型:

// models/article.js
...
export default DS.Model.extend({
  title: DS.attr(),
  text: DS.attr(),
  url: DS.attr(),
  date: DS.attr()
});

我完全按照教程( https://guides.emberjs.com/v2.2.0/tutorial/ember-data/ )進行操作。 然而,當我打開視圖時,我收到一個警告:

WARNING: Encountered "data" in payload, but no model was found for model name "datum" (resolved model name using test-app@serializer:-rest:.modelNameFromPayloadKey("data"))

並且沒有數據呈現。 我可以看到正確請求和返回的數據,但它以某種方式以錯誤的方式解釋。

我的問題是:出了什么問題? 我試圖堅持默認的API不寫任何適配器或序列化程序,但它不起作用。

-

更新:我將“鏈接”部分添加到響應對象,現在我收到兩個警告:

WARNING: Encountered "links" in payload, but no model was found for model name "link" (resolved model name using test-app@serializer:-rest:.modelNameFromPayloadKey("links"))
WARNING: Encountered "data" in payload, but no model was found for model name "datum" (resolved model name using test-app@serializer:-rest:.modelNameFromPayloadKey("data"))

-

更新2:所以我通過重構我的API響應來實現這一點:

{
  "articles" : [ {
    "id" : "5666157634499515eb7e13f0",
    "attributes" : {
      "title" : "test"
    }
  }, {
    "id" : "5666141034499511aea5f43c",
    "attributes" : {
      "title" : "test"
    }
  },
  ...
}
  • 將“數據”重命名為“文章”,這些文章特定於所請求的資源和請求類型(獲取一個,獲得許多)
  • 從資源對象中刪除“屬性”,現在直接包含所有屬性
  • 刪除了根對象中“articles”旁邊的所有鍵

我在這里看到了這個: ember數據沒有找到屬性名稱的模型我不明白為什么這個工作但是ember教程中的例子不是。 本教程適用於我正在使用的ember 2.2.0。 我通過ember cli創建了我的項目,然后用2.2.0替換了ember版本1.13。

-

更新3:解決了這個問題。 看到我的回答(我還不能接受)。 基本上,我使用了錯誤的REST適配器。 ember-cli使用RESTAdapter生成默認適配器,必須將其更改為JSONAPIAdapter。

問題是Ember默認使用RESTAdapter。 要將此響應格式與JSON API一起使用,必須使用JSONAPIAdapter。 所以在app / adapters / application.js中:

export default DS.JSONAPIAdapter.extend({
    ...
});

並按照規范中的描述將每個API響應的內容類型更改為application/vpn.api+json

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM