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