Typescript-如何将错误响应转换为错误对象?

时间:2018-11-23 07:28:41

标签: angular typescript

我想将打字稿中生成的异常记录到日志文件(文本文件)中。我想记录信息,如描述,消息,名称,编号,堆栈。我已经编写了Model,API Controller和将数据写入文本文件的逻辑。

但是我想映射在打字稿中进行获取,发布,放置操作后生成的错误响应。 我在接口下面写了

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

在下面的示例中,在Post之后调用handleError方法时,如何将错误响应中的值分配给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

}

2 个答案:

答案 0 :(得分:1)

如果出现错误,您将获得类型为 HttpErrorResponse 的实例。您可以从该实例中提取字段,并将其分配给您已定义的typeScriptException变量。您将不得不利用此实例中提供的详细信息,并相应地在typeScriptException上设置字段。

HttpErrorResponse的实例如下所示:

enter image description here

请牢记所有要考虑的字段,可以将其中一些分配给typeScriptException,具体方法如下:

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

答案 1 :(得分:0)

在我的情况下,我使用throw方法引发新的错误

import {Observable} from "rxjs"

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

或者如果您想获取Response的所有属性

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