angular - Typescript - Hur man konverterar Felrespons till Felföremål?
Jag vill logga undantag som genereras i TypeScript till en loggfil (textfil). Jag vill logga information som beskrivning, meddelande, namn, nummer, stack. Jag har skrivit Model, API Controller och logik för att skriva data till textfil.
Jag vill dock kartlägga felresponsen som genereras efter get-, post- eller put-operationer i TypeScript. Jag har skrivit följande gränssnitt
export interface TypeScriptException {
Description: string;
Message: string;
Name: string;
Number: string;
ErrorStack: string;
}
När handleError-metoden kallas efter Post i exemplet nedan, hur tilldelar jag värden från felresponsen till mitt TypeScriptException-objekt?
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
}
Svar #1
Vid fel får du en instans av typen HttpErrorResponse. Du kan extrahera fält från denna instans och tilldela dem till variabeln typeScriptException som du har definierat. Du kommer att behöva utnyttja de detaljer som tillhandahålls i denna instans och ställa in fälten på typeScriptException enligt detta.
Så här ser ett exempel på HttpErrorResponse ut:
Genom att hålla alla fälten i åtanke kan du tilldela några av dem till din typeScriptException, något i stil med detta:
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
}
}
Svar #2
I mitt fall använder jag throw-metoden för att kasta ett nytt fel
import {Observable} from "rxjs"
private handleError(res: HttpErrorResponse) {
Observable.throw(new Error({message:res.message,code:res.status}));
}
eller om du vill få alla egenskaper av Response
private handleError(res: HttpErrorResponse) {
Observable.throw(new Error({...res}));
}
