2015-09-04 28 views
0

目前正在從1.7到1.13(然後是2.0之後)升級一個相當大的EmberJS應用程序。我們現在幾乎在那裏。如何從DS.InvalidError和DS.AdapterError獲取狀態碼?

我們根據HTTP狀態代碼來處理來自服務器的錯誤。我們當前的代碼都有點像這樣...

model.save().then(
    // Success 
    function() { /* ... */ }, 
    // Failure 
    function(response) { 
     switch (response.status) { 
      case 403: 
       /* ... */ 
      case 422: 
       /* ... */ 
      case 500: 
       /* ... */ 
      default: 
       /* ... */ 

     } 
    } 
) 

以前,我們可能只是得到了status屬性的狀態代碼。現在,這不存在,因爲response變量是DS.InvalidError或DS.AdapterError的實例。

問題

我們如何才能獲得狀態代碼?

或者,我們如何區分不同的可能響應類別(DS.InvalidErrorDS.AdapterError)?

版本

  • 恩貝爾:1.13.6
  • 灰燼數據:1.13.7
+0

此答案可能會幫助您http://stackoverflow.com/questions/31918565/handling-errors-with-the-now-default-ember-data-json-api -adapter/32059528#32059528 – Sarus

+0

@Sarus我遇到過那個。我們尚未使用JSONAPI後端,並且確實需要訪問原始狀態代碼。 –

+0

您使用的是RESTAdapter嗎?我還沒有嘗試過,但我認爲你仍然可以重載適配器中的handleResponse方法來處理狀態。 – Sarus

回答

0

你如何讓狀態代碼(如果你得到它的話)取決於:錯誤發生的地方(模型掛鉤與否)以及響應格式(json或文本)。如果您的服務器狀態和純文本(不是對象),在你失敗的回調響應,你可能會收到

{ 
    errors: [ 
    { 
     detail: "Response from your server", 
     status: "500", 
     title: "The backend responded with an error" 
    } 
    ] 
} 

處理錯誤正確,我建議建立一個功能ajaxErrors,並調用它在失敗的情況下。在該函數中,將console.log(arguments);放在第一行,然後爲開發過程中將看到的所有情況編寫代碼。這是覆蓋大部分錯誤的唯一方法。 另外,您需要在應用程序路徑中定義一個error操作。它將處理在model掛鉤期間發生的錯誤。看(頁的結尾)的其他信息:http://guides.emberjs.com/v1.13.0/routing/loading-and-error-substates/

+0

謝謝。我爲失敗時響應中返回的InvalidError/DS.AdapterError創建了一個處理程序。這可以處理服務器返回的所有驗證錯誤消息,但不處理http狀態代碼。一個選項可能是將API更改爲返回JSON對象中的狀態,但我們在轉向JSON-API標準之前避免更改。錯誤操作是捕獲狀態代碼所需的。 –