2016-04-03 18 views
3

Ich baue derzeit eine kleine Demo-App mit Ember.JS und NodeJS mit Express. Ich habe ein einfaches Modell angeklopft und eine Aktion erstellt, um es zu speichern.Ember.js Modell speichern sendet keine Daten an Server

Die Komponente hat eine Eigenschaft namens recipe, die eine Instanz eines von mir definierten Modells ist. Die Aktion sparen ist so einfach wie:

save() { 
    this.get('recipe').save(); 
} 

Ein Blick auf meinen Netzwerk-Registerkarte in Chrome Entwickler-Tool, ich die Daten in der Anfrage-Payload sehen. Ich kann jedoch nicht auf die Daten in meiner Knoten-App zugreifen. Ich habe das vollständige Objekt req geloggt und meine Daten sind nirgends vorhanden.

Ich habe das Gefühl, dass dies mit der Tatsache zu tun hat, dass Ember das PATCH-Verb verwendet, während ich erwarte, dass es PUT oder POST verwendet.

Jede Hilfe wird sehr geschätzt.

Antwort

0

Am Ende habe ich das Problem mit DS.RESTAdapter im Gegensatz zu DS.JSONAPIAdapter behoben. Die RESTAdapter verwendet PUT, wenn Sie einen Datensatz speichern, während JSONAPIAdapterPATCH verwendet. Ich vermute, es gibt ein Problem bei der Implementierung von PATCH in Ember oder Express.

2

Haftungsausschluss: Ohne den Code zu sehen, ist es schwierig, Ihnen eine definitive Antwort zu geben.

Die JSON-API-Spezifikation definiert, dass das Aktualisieren einer Ressource mit dem PATCH-Verb erfolgt. (http://jsonapi.org/format/#crud-updating)

Wenn Sie diesen Adapter verwenden möchten, müssen Sie die entsprechenden Routen in Ihrer Express-App definieren. Ohne es zu sehen, würde ich vorschlagen, die Route für PUT und PATCH mit demselben Callback zu definieren, und alles wird gut.

Zum Beispiel:

router.put('/:id', controller.update); 
router.patch('/:id', controller.update); 

das HTTP-Verbs im Adapter Aufschalten ist nicht so einfach im Moment (Ember Daten 2.4). Ein möglicher Kopf wäre es, die updateRecord Methode des Adapters zu überschreiben. (https://github.com/emberjs/data/blob/v2.4.0/addon/adapters/json-api.js#L115-L133)

+0

Ich hätte klarer sein müssen. Ich habe bereits die Routen PATCH und PUT in meiner Express-App definiert, aber das 'req.body'-Objekt ist leer, wenn ich das Modell in meinem Ember-Code speichere. Die Route wird definitiv als OK bezeichnet, nur die benötigten Daten werden nicht mitgeschickt. –

0

Haftungsausschluss: Ohne den Code zu sehen, ist es schwierig, Ihnen eine definitive Antwort zu geben.

Sie empfangen die Anforderungsnutzlast nicht, da die 'Content-Type'-Kopfzeile nicht ordnungsgemäß festgelegt wurde.

Die JSONAPIAdapter für Ember sendet Anfragen mit 'Content-Type' Header auf 'application/vnd.api+json' festgelegt. Sie müssen dies in body-parser wie folgt einstellen:

app.use(bodyParser.json({ type: 'application/vnd.api+json' })); 
Verwandte Themen