Приложение Ember не читает API, используя hapijs Я считаю, что мой API в порядке, просто проблема с Ember

поэтому я начал создавать приложение, которое использует ember и hapi для изучения обоих.

Я вставил фрагменты ниже, но у меня также есть и сервер, и приложение Ember, доступные в репозитории здесь, https://github.com/jrutishauser/contactsApp, если вам интересно посмотреть, что у меня там есть.

У меня есть сервер hapi, показывающий ниже с моего сервера sql

{"data":[{"id":1,"first_name":"Joe","middle_initial":null,"last_name":"Smith","title":null,"phone_number":"(555) 111-2222","email":"[email protected]","street_address":"123 Some Street","city":"Salt Lake City","state":"Utah","zip_code":"84111","created_at":1456988902625,"updated_at":1456988902625},{"id":2,"first_name":"John","middle_initial":null,"last_name":"Jones","title":null,"phone_number":"(555) 222-3333","email":"[email protected]","street_address":"1432 Another Street","city":"Montgomery","state":"Alabama","zip_code":"99291","created_at":1456988902625,"updated_at":1456988902625},{"id":3,"first_name":"Joe","middle_initial":null,"last_name":"Smith","title":null,"phone_number":"(555) 111-2222","email":"[email protected]","street_address":"123 Some Street","city":"Salt Lake City","state":"Utah","zip_code":"84111","created_at":1457588539468,"updated_at":1457588539468},{"id":4,"first_name":"John","middle_initial":null,"last_name":"Jones","title":null,"phone_number":"(555) 222-3333","email":"[email protected]","street_address":"1432 Another Street","city":"Montgomery","state":"Alabama","zip_code":"99291","created_at":1457588539468,"updated_at":1457588539468}]}

at

http://localhost:3000/api/contacts

в моем приложении ember есть следующие файлы, содержащие:

адаптеры/application.js,

  1 import DS from 'ember-data';
  3 export default DS.JSONAPIAdapter.extend({
  4   namespace: 'api',        
  5   host: 'http://localhost:3000'
  6 });

модели/contact.js,

  1 import DS from 'ember-data';

  3 export default DS.Model.extend({
  5   firstName: DS.attr('string'),
  6   lastName: DS.attr('string'),
  7   middleInitial: DS.attr('string'),
  8   title: DS.attr('string'),
  9   phoneNumber: DS.attr('string'), 
  10   email: DS.attr('string'),
  11   streetAddress: DS.attr('string'),
  12   city: DS.attr('string'),
  13   state: DS.attr('string'),
  14   zipCode: DS.attr('string'),
  15   createdAt: DS.attr('date'),
  16   updatedAt: DS.attr('date')  
  17 });

маршруты/контакты.js

  1 import Ember from 'ember'; 
  2                            
  3 export default Ember.Route.extend({
  4     model: function(){     
  5         return this.store.findAll('contact');
  6     }                      
  7 });

Я также установил это в serializers/application.js, но не думаю, что это необходимо, так как мне не нужно ничего нормализовать.

  1 import DS from 'ember-data';
  2 
  3 export default DS.JSONAPISerializer.extend({
  4   primaryKey: 'id',
  5   serializeId: function(id) {
  6     return id.toString();
  7   }
  8 });

шаблоны/контакты.hbs

  1 <ul>  
  2   {{#each contact in model}}
  3       <li>{{#link-to 'contact' contact}}{{contact.firstName}}{{/link-to}}</li>
  4   {{/each}}
  5 </ul>  
  6 
  7 {{outlet}}

Все, что я ожидаю, это маршрут контактов, чтобы просто показать список в настоящее время из API, я еще не закончил с этим и застрял здесь на некоторое время.

ошибки консоли, которые я получаю,

ember.debug.js:28590 Error while processing route: contacts.index Assertion Failed: You may not set `id` as an attribute on your model. Please remove any lines that look like: `id: DS.attr('<type>')` from (unknown mixin) Error: Assertion Failed: You may not set `id` as an attribute on your model. Please remove any lines that look like: `id: DS.attr('<type>')` from (unknown mixin)

а также

Error: Assertion Failed: Encountered a resource object with an undefined type (resolved resource using contacts-app@serializer:application:)

person imnothardcore    schedule 27.03.2016    source источник


Ответы (1)


Если вы используете Ember Data по умолчанию, он использует JSONAPISerializer для сериализации и десериализации записей.

JSONApiSerializer поддерживает спецификацию http://jsonapi.org/.

Для этого вам нужно вернуть данные с сервера в соответствии со спецификацией JSON API или нормализовать данные в сериализаторе в вашем приложении ember.

Вы можете посмотреть пример в руководствах по Ember, объясняющий этот http://emberjs.com/api/data/classes/DS.JSONAPISerializer.html

Вы также можете проверить подключаемые модули, которые реализуют спецификацию, здесь http://jsonapi.org/implementations/#client-libraries-javascript. Похоже, есть плагин для hapi framework (https://github.com/wraithgar/hapi-json-api), поскольку вы используете его, это может помочь.

person Altrim    schedule 27.03.2016
comment
спасибо, что поделились этими ресурсами, я пройдусь по ним, когда у меня будет шанс сегодня, и, надеюсь, найду свою ошибку. - person imnothardcore; 27.03.2016
comment
@imnothardcore Пример, вторая ошибка, которую вы получаете, связана с тем, что в спецификации указано, что вам нужно определить тип для модели. Так что каждый контакт должен иметь в ответе type='contact'. Также все атрибуты должны быть определены внутри хэша attributes в ответе и т. д. В приведенной выше ссылке из руководств Ember вы можете увидеть немного лучший пример того, как должна выглядеть полезная нагрузка. - person Altrim; 27.03.2016
comment
спасибо, это решило все мои ошибки консоли, и с помощью плагина ember chrome, похоже, я вижу свой массив с 4 объектами. Похоже, у меня просто ошибка в моей модели/шаблоне ember - person imnothardcore; 30.03.2016