2016-08-21 5 views
0

私のコードは、そのエラー応答は、APIに文書を保存するための

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

のように見えます。

私の質問は、検証エラーはどのように見えますか?

+0

何オブジェクトを保存するときに開発者コンソールからのリクエストのヘッダーですか? – DanGar

+0

私は200になる前に400に変更されましたが、結果は同じです。 –

+0

エラー処理は、ember-dataアダプタによって異なります。どのアダプターを使用していますか? – Engwan

答えて

1

デフォルトでは、ステータスコードが422のときに応答が無効であると判断します。これを変更するには、アダプタの機能を無効にすることができます。

また、ember-dataは、エラーをjson-apiエラーオブジェクトにフォーマットすることを想定しています。バックエンドでこの形式で返さない場合は、アダプタのhandleResponse関数をオーバーライドすることで、バックエンドで変換できます。

これはサンプル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);                                                  
    }                                                          
} 
関連する問題