2014-10-03 27 views
1

我在我的Ember應用程序中使用最新的餘燼數據庫進行持久化。如何攔截餘燼數據響應並採取替代操作。

以下是我的路由定義:

export default Ember.Route.extend({ 

    model: function() { 
     return this.store.find('language'); 
    } 
}); 

這有兩種可能的響應:

  • 普通場景:{"language":{"id":123,"name": "English"}}
  • 錯誤的場景:{"error-response":{"status":"398648","message": "internal error."}}這是所有標準的錯誤信息錯誤。

在這兩種情況下,響應都以「http 200 success」狀態碼返回。所以這意味着這個ember會嘗試調用這個resolve回調併爲錯誤情況產生錯誤。我需要爲我們的模型定義處理這個問題。有什麼辦法可以攔截這種迴應並採取替代措施?

+0

我遇到同樣的問題。我無法通過爲不同框架選擇的設置更改服務器響應; - / – 2014-11-25 22:31:55

回答

2

你可以在串行爲此,檢查它在那裏(http://emberjs.com/api/data/classes/DS.RESTSerializer.html#method_normalize)或沿的喜歡的東西:

export default Ember.Route.extend({ 

    model: function() { 
     return this.store.find('language').then(function(language){ 
      //perform your check on the response here 
      //if language contains error-response this.transitionTo('errorpage') 
      //else return language -- that kinda thing. 
     }); 
    } 
}); 
1

首先,返回HTTP代碼200,同時得到一個錯誤的人比怪多。 Ember期望錯誤情況下的合理迴應。這意味着,如果您得到4xx錯誤,則ember將激活Ember.Route.error掛鉤(http://emberjs.com/guides/routing/loading-and-error-substates/#toc_code-error-code-substates);如果服務器響應validation error(Ember-422中的默認代碼),則比Ember.Adapter將調用extractValidationErrors等。簡而言之,如果您遇到錯誤,請將其視爲錯誤,而不是成功的迴應。