angular - Typescript - Cum să convertești un răspuns de eroare într-un obiect de eroare?


Vreau să înregistrez excepțiile generate în TypeScript într-un fișier de log (fișier text). Vreau să înregistrez informații precum descrierea, mesajul, numele, numărul, stiva. Am scris Modelul, Controller-ul API și logica pentru a scrie datele în fișierul text.

Totuși, vreau să mapez Răspunsul de Eroare generat după operațiunea get, post, put în TypeScript. Am scris mai jos Interfața

export interface TypeScriptException {
    Description: string;
    Message: string;
    Name: string;
    Number: string;
    ErrorStack: string;
}

Când metoda handleError este apelată după Post în exemplul de mai jos, cum pot să atribui valorile din Răspunsul de Eroare obiectului meu TypeScriptException?

post(url: string, model: any): Observable<any> {

    let body = JSON.stringify(model);
    let headers = new Headers({ 'Content-Type': 'application/json' });
    let options = new RequestOptions({ headers: headers });
    return this._http.post(url, body, options)
        .map((response: Response) => <any>response.json())
        .catch(this.handleError);
}

private handleError(error: Response) {

    let typeScriptException: TypeScriptException;

    //What to do here

}

Răspuns #1

În caz de eroare, primiți o instanță de tip HttpErrorResponse. Puteți extrage câmpuri din această instanță și le puteți atribui variabilei typeScriptException pe care ați definit-o. Va trebui să folosiți detaliile furnizate în această instanță și să setați câmpurile pe typeScriptException în mod corespunzător.

Iată cum arată o instanță de HttpErrorResponse:

Ținând cont de toate câmpurile pe care le are în vedere, poți atribui unele dintre ele obiectului tău typeScriptException, ceva de genul acesta:

private handleError(error: HttpErrorResponse) {
  let typeScriptException: TypeScriptException;
  let { message, name, ok, status, statusText, url } = error;
  //What to do here?
  typeScriptException = {
    Description: `${name} - ${message}`, // OR SOMETHING
    Message: message
    Name: name,
    Number: status, // OR SOMETHING
    ErrorStack: statusText // OR SOMETHING
  }
}

Răspunsul #2

În cazul meu folosesc metoda throw pentru a arunca o eroare nouă

import {Observable} from "rxjs"

private handleError(res: HttpErrorResponse) {
  Observable.throw(new Error({message:res.message,code:res.status}));
}

sau dacă vrei să obții toate proprietățile lui Response

private handleError(res: HttpErrorResponse) {
  Observable.throw(new Error({...res}));
}