2016-12-15 7 views
2

Ich schreibe ein Stück Angular2 Code, der mit einem Server interagiert, der ein JSON mit http-Fehlercodes wie 404 oder 401 zurückgibt. Ich kann keinen Weg finden, den Json aus zu lesen die Fehlerreaktion. Ich kann .map() nicht verwenden, da keine Daten zur normalen Antwort vorliegen.Angular2 extrahieren Json aus Fehler

return new Promise((resolve, reject: Response) => { 
     this.http.request(new Request(requestoptions)) 
      .subscribe(
      data => {resolve()}, 
      error => { error.json() } //<-- No json() 
     ) 
     }; 

Wie geht das?

+0

Prüfung [diese] (https://angular.io/docs/ts/latest/guide/server-communication.html#!#error-handling), wie man Handle Fehler beim Http Call. –

+0

try error => console.log (Fehler), Die Fehlerobjektantwort ist möglicherweise kein JSON-Objekt. Wie sieht der api Sendecode aus? – deek

+0

Der Fehlercode enthält ein JSON-Objekt (ich sehe dies in der HTTP-Antwort im Browser) – ApriOri

Antwort

1

Ich habe mein Problem gelöst, indem ich versucht habe, nur HTTP-Codes zu analysieren, die eine Antwort enthalten. Dieser Beispielcode kann anderen helfen:

return new Promise((resolve, reject) => { 
    this.httpProvider.login(url, credentials) 
    .map(res => { 
     //avoid parsing the response from the server for some requests since it's not a valid json 
     if (res.status >= 400 && res.status < 500) { 
     return res.json(); 
     } 
     else return res; 
    }) 
    .subscribe(
     data => { 
     }, 
     error => { 
     switch (error.status) { 
      case 400: 
      case 401: 
      let erromsg: string = this.parseServerError(error); 
      reject(erromsg); 
      break; 
      case 404: 
      case 500: 
      reject("Server error"); 
      break; 

      default: 
      reject("Network Error"); 
     } 
     } 
    ); 
}); 




parseServerError(error): string { 
    try { 
    let message = error.json().message[0].description; 
    return message; 
    } catch (e) { 
    return "Undefined error"; 
    } 
}