2016-08-21 2 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

기본적으로 ember-data 어댑터는 상태 코드가 422 일 때 응답이 유효하지 않다고 판단합니다.이 변경하려면 어댑터의 isInvalid 기능을 무시할 수 있습니다.

또한 이제 ember-data는 json-api 오류 객체로 포맷 된 오류를 예상합니다. 백엔드에서이 형식으로 반환하지 않으면 어댑터의 handleResponse 함수를 재정 의하여이를 ember로 변환 할 수 있습니다. 당신이 위에서 설명한 오류 응답을 반환하는 경우

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

것은, 당신이 당신의 어댑터를 같이해야 할 것이다 :

은 샘플 JSON-API 오류입니다

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);                                                  
    }                                                          
} 
관련 문제