2016-08-21 1 views
0

Mein Code Dokument API zum Speichern wie dieFehlerreaktion in glut-Daten api

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

Wenn API Antworten sucht ist:

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

dann

category.get('isValid')

noch true zurück .

Meine Frage ist, wie Validierungsfehler aussehen sollten?

+0

Was sind die Header der Anfrage von der Entwicklerkonsole, wenn Sie das Objekt speichern? – DanGar

+0

Bevor ich 200 hatte, aber jetzt auf 400 ändere, ist das Ergebnis dasselbe. –

+0

Die Fehlerbehandlung hängt von Ihrem Glutendatenadapter ab. Welchen Adapter benutzen Sie? – Engwan

Antwort

1

Standardmäßig stellt der Adapter von ember-data fest, dass eine Antwort ungültig ist, wenn der Statuscode 422 lautet. Sie können die isInvalid-Funktion des Adapters überschreiben, um dies zu ändern.

Außerdem erwartet ember-data nun, dass Fehler in ein json-api-Fehlerobjekt formatiert werden. Wenn Ihr Back-End es nicht in diesem Format zurückgibt, können Sie es in ember transformieren, indem Sie die handleResponse-Funktion des Adapters überschreiben.

Dies ist ein Beispiel json-api Fehler:

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

Wenn Sie Fehlerreaktionen sind Rückkehr Sie oben beschrieben, würden Sie so etwas wie dies in Ihrem Adapter zu tun haben:

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);                                                  
    }                                                          
} 
Verwandte Themen