Angular HTTP Client未显示位于Response对象

时间:2018-02-15 14:53:16

标签: angular error-handling

我使用以下代码记录服务的错误消息:

[... snip ...]


  private handleError (error: Response | any) {
    let errMsg: string;
    if (error instanceof Response) {
      const body = error.json() || '';
      const err = body.error || JSON.stringify(body);
      errMsg = `${error.status} - ${error.statusText} - ${error.statusText || ''} ${err}`;
    } else {
      errMsg = error.message ? error.message : error.toString();
    }
    console.error(errMsg);
    return Observable.throw(errMsg);
  }



adminLogin(username, password): Observable<any> {
    let url = `${this._apiRoot}/login`;
    let tokenResp = {};

    return this.http.post(url, JSON.stringify({ username: username, password: password }), { observe: 'response' })
      .map((response: HttpResponse<any>) => {
        let token = response.headers.get("Authorization");
        let t = JWT(token);
        return t;
      })
      .catch(this.handleError);
  }

[... snip ...]

查看Chrome网络标签页(执行POST后),我在网络中看到以下Response的一部分:

  

{ “时间戳”:1518704916793, “状态”:401, “错误”: “未授权”, “消息”:“认证   失败:凭据错误“,”路径“:”/ login“}

我正在尝试将未经授权“身份验证失败:凭据错误显示为错误消息的一部分;但是,我不知道这是怎么回事使用Response对象访问。

如何访问此信息?

TIA

更新

感谢您提供的信息。我更改了调用函数,如下所示:

onSubmit(userForm: NgForm) {

    console.log(userForm);

    console.log(" getting ready to go call the service ");
    let sendUser = userForm.value.username;
    let sendPassword = userForm.value.passwordconf;

    console.log(" values for id and password " +
      sendUser + " ----- " + sendPassword);

    this.authService.adminLogin(sendUser, sendPassword).subscribe((response) => {
   [ ... snip ...]
    },
    ( error : any ) => {
     console.error( " --- function produced an error ");
     console.log( error );
     let errMsg = "HTTP Status : " + error.status + " MESSAGE " +  error.error.message; 
     console.error( errMsg );
    });

我使用了以下行:

     let errMsg = "HTTP Status : " + error.status + " MESSAGE " +  error.error.message;

由于我在打印“错误”对象时看到的内容:

enter image description here

问题:这是否足以进行错误处理?似乎(根据Chrome中的“网络”选项卡)错误类型为HttpErrorResponse是否需要在预期其他错误类型弹出时进行更改?这就是之前使用“功能”的原因。

0 个答案:

没有答案