2016-04-03 6 views
3

私は現在Ember.JSとExpressを使用したNodeJSを使って小さなデモアプリケーションを構築しています。私は単純なモデルをノックし、それを保存するアクションを作成しました。Ember.jsモデルsaveはサーバにデータを送信しません

コンポーネントにはrecipeというプロパティがあります。これは私が定義したモデルのインスタンスです。保存操作は次のように簡単です:

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

Chromeデベロッパーツールの[ネットワーク]タブを見ると、リクエストペイロードにデータが表示されます。ただし、Nodeアプリケーションのデータにアクセスできません。私は完全なreqオブジェクトを記録しており、私のデータはどこにもありません。

EmberがPATCH動詞を使用しているのに対して、これはPUTまたはPOSTを使用すると期待しています。

ご協力いただきまして誠にありがとうございます。

答えて

0

最後にDS.JSONAPIAdapterではなくDS.RESTAdapterを使用して問題を解決しました。 RESTAdapterJSONAPIAdapterPATCHを使用している間にレコードを保存するとPUTを使用します。 EmberまたはExpressのPATCHの実装に問題があると思われます。

2

免責事項:コードを見ることなく、あなたに決定的な答えを与えることは難しいです。

JSON API仕様では、リソースの更新はPATCH動詞で行われると定義されています。 (http://jsonapi.org/format/#crud-updating

このアダプタを使用する場合は、Expressアプリケーションで適切なルートを定義する必要があります。それを見ることなく、同じコールバックでPUTとPATCHのルートを定義することをお勧めします。例えば

:アダプターでのHTTP動詞をオーバーライド

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

はモーメント(エンバーデータ2.4)で、それは容易ではありません。考えられる問題は、アダプタのupdateRecordメソッドをオーバーライドすることです。 (https://github.com/emberjs/data/blob/v2.4.0/addon/adapters/json-api.js#L115-L133

+0

私はもっとはっきりしていたはずです。 ExpressアプリケーションでPATCHとPUTルートを定義しましたが、モデルをEmberコードに保存すると 'req.body'オブジェクトは空になります。ルートは間違いなくOKと呼ばれているだけで、必要なデータは一緒に送信されません。 –

0

免責条項:コードを見ずに、あなたに決定的な答えを与えることは困難です。

'Content-Type'ヘッダーが正しく設定されていないため、リクエストペイロードは受信されません。

JSONAPIAdapterは、'Content-Type'ヘッダーを'application/vnd.api+json'に設定して要求を送信します。これをbody-parserに設定する必要があります。

app.use(bodyParser.json({ type: 'application/vnd.api+json' })); 
関連する問題