2016-04-03 58 views
3

我目前正在使用Ember.JS和NodeJS構建一個使用Express的小型演示應用程序。我打了一個簡單的模型,並創建了一個操作來保存它。Ember.js模型保存不會向服務器發送數據

該組件具有一個名爲recipe的屬性,該屬性是我定義的模型的一個實例。保存操作如下:

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

查看我在Chrome開發工具中的網絡選項卡,可以看到請求負載中的數據。但是,我無法訪問我的Node應用程序中的數據。我記錄了完整的req對象,並且我的數據不在任何地方。

我有一種感覺,這與Ember使用PATCH動詞的事實有關,而我期望它使用PUT或POST。

任何幫助,非常感謝。

回答

0

最後,我通過使用DS.RESTAdapter而不是DS.JSONAPIAdapter來解決問題。 RESTAdapter在保存記錄時使用PUT,而JSONAPIAdapter使用PATCH。我懷疑在Ember或Express中執行PATCH時存在一些問題。

2

聲明:沒有看到代碼,很難給你一個明確的答案。

JSON API規範定義,更新資源是使用PATCH謂詞完成的。 (http://jsonapi.org/format/#crud-updating

如果您選擇使用此適配器,則必須在Express應用程序中定義適當的路線。如果沒有看到它,我會建議使用相同的回調來定義PUT和PATCH的路由,你會沒事的。

例如:

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

重寫在適配器中的HTTP動詞是不容易在時刻(灰燼數據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'對象就是空的。這條路線絕對被稱爲好,只是所需的數據不會與它一起發送。 –

0

免責聲明:沒有看到代碼,很難給你一個明確的答案。

您沒有收到請求有效負載,因爲'Content-Type'標頭沒有正確設置。

Ember的JSONAPIAdapter發送請求,'Content-Type'標頭設置爲'application/vnd.api+json'。你需要在body-parser這樣設置:

app.use(bodyParser.json({ type: 'application/vnd.api+json' })); 
相關問題