2016-08-21 128 views
0

我保存文件API代碼看起來像錯誤響應

save(category) { 
     category.save().then(() => { 
      this.transitionTo('categories'); 
     }).catch((adapterError) => { 
      console.log(category.get('errors').toArray()); 
      console.log(category.get('isValid')); 
     }); 
    }, 

當API的答案是:

{"errors":[{"attribute":"name","message":"This value should not be blank."}]}

然後

category.get('isValid')

仍然返回true 。

我的問題是,驗證錯誤應該如何看起來像?

+0

什麼是保存對象時來自開發者控制檯的請求的標題嗎? – DanGar

+0

之前我有200,但現在改爲400,結果是一樣的。 –

+0

錯誤處理取決於您的ember-data適配器。你使用哪個適配器? – Engwan

回答

1

默認情況下,當狀態碼爲422時,默認情況下,ember-data的適配器確定響應無效。您可以覆蓋適配器的isInvalid函數以更改此設置。

另外,ember-data現在希望將錯誤格式化爲json-api錯誤對象。如果您的後端沒有以這種格式返回它,您可以通過重寫適配器的handleResponse函數來將其轉換爲ember。

這是一個示例JSON-API錯誤:

{"errors": [ 
    { 
    "detail": "Must be unique", 
    "source": { pointer: "/data/attributes/title"} 
    }, 
    { 
    "detail": "Must not be blank", 
    "source": { pointer: "/data/attributes/content"} 
    } 
]} 

如果你回到你上述錯誤的反應,你會做這樣的事情在你的適配器:

handleResponse(status, headers, payload) {                                                
    if (status === 422 && payload.errors) {                                                 
    let jsonApiErrors = [];                                                    

    for (let key in payload.errors) {                                                  
     for (let i = 0; i < payload.errors[key].length; i++) {                                            
     jsonApiErrors.push({                                                    
      detail: payload.errors[key][i],                                                 
      source: {                                                      
      pointer: `data/attributes/${key}`                                                
      }                                                        
     });                                                        
     }                                                         
    }                                                          

    return new DS.InvalidError(jsonApiErrors);                                               
    } else {                                                        
    return this._super(...arguments);                                                  
    }                                                          
}