2016-12-15 4 views
2

Я нажимаю кусок кода Angular2, который взаимодействует с сервером, который возвращает json с кодами ошибок HTTP, такими как 404 или 401. Я не могу найти способ прочитать json из ответ об ошибке. Я не могу использовать .map(), так как нет данных о нормальном ответе.Angular2 extract json from error

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

Как справиться с этим?

+0

проверка [это] (https://angular.io/docs/ts/latest/guide/server-communication.html#!#error-handling) о том, как обрабатывать ошибки, а Http Call. –

+0

try error => console.log (ошибка). Ответ объекта ошибки не может быть объектом json. Как выглядит код отправки api? – deek

+0

Код ошибки содержит объект json (я вижу это в ответе http в браузере) – ApriOri

ответ

1

Я решил свою проблему, пытаясь разобрать только http-коды, содержащие ответ. Этот пример кода может помочь другим:

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"; 
    } 
}