2016-04-28 4 views
0

「単一のレコードを発見した期待のアレイ」というエラーがスローされます私持っている「すべての場所を取得する」の次急行ルート:エンバーデータ:store.queryが正しく配列を返しますが、それでも

router.get('/', function(req, res){ 

    let q = req.query; 

    let locations = Location.find({organization: q.organization}); 

    locations.then(r => res.status(200).send(r)) 
     .catch(err => res.status(500).send(err)); 
}); 

そして、この燃えさしモデルフックそれを正しくトリガー:今すぐ

model(){ 
    return this.store.findRecord("user", this.get('session.currentUser.id')) 
     .then(user => user.get('organization')) 
     .then(org => this.store.query("location", {organization: org.id})) 
} 

、このクエリはのparamsで、次のURLにGETリクエストを送信している:

GET /locations?organization=571974742ce868d575b79d6a 

そして、私のサーバーは、200の成功コードを返しているが、その後のモデルフックは、このエラーでクラッシュします

query to locations failed with error: Error: Assertion Failed: The response to store.query is expected to be an array but it was a single record. Please wrap your response in an array or use `store.queryRecord` to query for a single record. 

同じアドレスへの郵便配達依頼の作成:私は配列が返さ見

localhost:3200/locations?organization=571974742ce868d575b79d6a 

を、

[{object1}, {object2] 

これは正しい応答のようです。 Emberがなぜ単一のレコードしか受け取っていないと言っているのですか?

それも、私のモデルフックが呼び出され、この警告をスロー:

WARNING: Encountered "0" in payload, but no model was found for model name "0" (resolved model name using [email protected]:application:.modelNameFromPayloadKey("0")) 

編集:これを実現

は、シリアライザ/アダプタ・エラーの可能性があります:

たぶん
// app/adapters/application.js 

import DS from 'ember-data'; 
import DataAdapterMixin from 'ember-simple-auth/mixins/data-adapter-mixin'; 

export default DS.RESTAdapter.extend(DataAdapterMixin, { 
    host: 'http://localhost:3200', 
    authorizer: 'authorizer:application' 
}); 

私のシリアライザには何かがありませんか?

// app/serializers/application.js 

import DS from 'ember-data'; 

export default DS.RESTSerializer.extend({}); 
+0

?どのアダプタ/シリアライザを使用していますか? (Ember Data 2+のデフォルトはJsonApiAdapter/JsonApiSerializerで、これはあなたのレスポンスと互換性がありません)。 – Gaurav

+0

応答のためのおかげで@Guarav私はアダプタとシリアライザのコードを含める質問を編集しました。 –

+0

プロジェクトを2.5.0に更新する –

答えて

2

RESTSerializerは、オブジェクトの配列は、複数形モデル名に一致するペイロードキーの内部で配信されることを想定して:また

{ 
    "organizations": [ 
    { 
     "id": 1, 
     "key1": "value1", 
     "key2": "value2" 
    }, 
    { 
     "id": 2, 
     "key1": "value3", 
     "key2": "value4" 
    } 
    ] 
} 

あなたはペイロードキーを送信したくない場合は、JsonSerializerを使用することができます。

1

FYIについては、次の表を参照して、サーバーが応答を単数形または複数形で返す必要があるかどうかを確認してください。

| Async from server/store | Sync from store | Query server Single Record | findRecord(type,id) | peekRecord(type, id) | queryRecord(type, {query}) All Records | findAll(type) | peekAll(type) | query(type, {query})

参考:エンバーデータのバージョン

1. CRUD with Ember (+ Data)

2. Ember_data_rest_api.md

関連する問題