2017-05-08 2 views
1

ember로 내 REST API에서 브랜드 항목을 가져 오려고합니다. 내 API 응답이 예상되는 데이터와 일치하지 않습니다. 예를 들어 :ember serializer에서 사용자 정의 루트 json 노드를 정의하십시오.

내 모델 :

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    name: DS.attr('string'), 
    isActive: DS.attr('boolean') 
}); 

내 API의 URL : http://localhost:3000/api/brands 과의 응답 :

{"success":true, 
    "data":[ 
     {"id":1,"name":"Mine","isActive":true,"createdAt":"2017-04-23T20:36:49.000Z","updatedAt":"2017-04-23T20:44:32.000Z"}, 
     {"id":2,"name":"forever","isActive":true,"createdAt":"2017-04-23T20:41:14.000Z","updatedAt":"2017-04-23T20:43:57.000Z"} 
    ] 
} 

하지만, 엠버이 같은 몇 가지를 기대하고있다 :

"brands": [{ 

    "id": 1, 
    "name": "foo", 
    "isActive": "foo" 

}] 

나는 브랜드라는 serializer에서 루트 json 노드를 변경하려고합니다. js,하지만 그것을 작동하게 만들 수는 없습니다. :(

여기

내 시리얼 라이저//

import DS from 'ember-data'; 

export default DS.RESTSerializer.extend({ 

}); 

내 어댑터를 brand.js 브라우저 콘솔에

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


export default DS.RESTAdapter.extend(DataAdapterMixin, { 
    host: `${config.host}`, 
    namespace: `${config.namespace}`, 
    authorizer: 'authorizer:custom' 
}); 

application.js이 메시지가 나타납니다

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

어떻게 나는 정확한 데이터가 어디에 있는지에 대해 말하고있다. 어떤 도움을 주시면 감사하겠습니다.

죄송합니다. 영어 실력이 좋지 않으면 죄송합니다.

답변

1

이미했듯이 모든 모델에 대해 RESTSerializer를 무시할 수 있습니다.

달성하고자하는 것은 응답 정규화입니다. 당신은 당신의 시리얼 (see the docs)에 normalizeResponse를 무시하여 응답을 정상화 할 수

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

const { 
    RESTSerializer 
} = DS; 

const { 
    get 
} = Ember; 

export default RESTSerializer.extend({ 
    normalizeResponse(store, primaryModelClass, payload, id, requestType) { 
    // Only do normalization for reading: 
    if(requestType !== 'createRecord' && requestType !== 'updateRecord' && requestType !== 'deleteRecord') { 
     // Do your normalization here. For example (not tested): 
     payload = { 
     brands: get(payload, 'data') 
     }; 
    } 

    return this._super(store, primaryModelClass, payload, id, requestType); 
    } 
}); 

대신 최우선 normalizeResponse, 당신은 또한 other normalization methods를 오버라이드 (override) 할 수있다.

+0

@ Timm에 감사드립니다. 그 일 :) –

관련 문제