mercredi 7 septembre 2016

Why is ember-data 2.7.0 normalizeHelper expecting a JSON API response from my custom adapter?

I have an ember-cli project which uses JSONAPI adapter, via adapters/application.js. I want to add a model class that should use the ember-localstorage-adapter. I declare the model and the respective adapter and serializer:

 models/widget.js
 import DS from 'ember-data';
 export default DS.Model.extend({...});

 adapters/widget.js
 import LSAdapter from 'ember-localstorage-adapter';
 export default LSAdapter.extend({});

 serializers/widget.js
 import LSSerializer from 'ember-localstorage-adapter';
 export default LSSerializer.extend({});

and load this models in my route:

 routes/index.js
 import Ember from 'ember';
 export default Ember.Route.extend({
    model() {
      return this.store.findAll('widget');
    }
 });

This should work, but I get a missing function type error:

ember.debug.js:19755 TypeError: serializer.normalizeResponse is not a function
  at normalizeResponseHelper (serializer-response.js:80)
  at finders.js:147
  at Object.run (ember.debug.js:295)
  at Class._adapterRun (store.js:2056)
  at finders.js:146
  at tryCatch (ember.debug.js:52052)
  at invokeCallback (ember.debug.js:52067)
  at publish (ember.debug.js:52035)
  at ember.debug.js:41262
  at invoke (ember.debug.js:991)

OK, I add the missing method:

 serializers/widget.js
 import LSSerializer from 'ember-localstorage-adapter';
 export default LSSerializer.extend({
   normalizeResponse: function(store, modelClass, payload, id, requestType) {
     return payload;
   }
 });

And now the error is about the payload:

 ember.debug.js:19755 Error: Assertion Failed: normalizeResponse must return a valid JSON API document:
    * One or more of the following keys must be present: "data", "errors", "meta".
    at new Error (native)
    at Error.EmberError (../assets/vendor.js:30247:21)
    at assert (../assets/vendor.js:17276:13)
    at Object.assert (../assets/vendor.js:30059:34)
    at assert (../assets/vendor.js:97498:37)
    at normalizeResponseHelper (../assets/vendor.js:107520:39)

Why is this asserted? Can't I mix and match a JSON API adapter with a non-conforming one? I understand there could be problems if the models would try to intreact (eg. has-one/belongs-to etc relationships) but there is no such thing. I'm just trying to add a new model that is not backed by my back-end (JSON-API conforming) REST api.

Ember: 2.7.2
Embed Data: 2.7.0




Aucun commentaire:

Enregistrer un commentaire