如何从订阅的错误回调中获取标头?

时间:2018-07-03 13:20:00

标签: angular rxjs angular5 rxjs5

在用户创建后响应之后,我想处理来自服务器的任何错误响应。该帖子在UserService createUser()方法中进行。 catch方法捕获任何错误,然后引发新错误。我已经读过,这是必须的,否则无论错误如何,subscribe方法中的成功回调都将被激活。

我正在使用Visual Studio代码作为该项目的IDE,当您在变量后键入.运算符时,它会列出可在该变量上调用的任何方法。成功回调变量具有所有预期的方法,包括标头。错误回调仅包含html。所以我的问题是:如何从错误中获取标头?我需要访问标题,因为我的自定义标题消息是在标题中发送的。这需要在位于组件控制器内的subscription方法内完成,因为当我处理服务中的错误时,我无法显示错误消息弹出窗口。这是我的代码:

组件控制器端的代码:

  createUser():void{
    this.loading = true;
      this.userService.createUser(new UserCreateDTO(this.userForm.get('userName').value, 
                this.userForm.get('emailAddress').value, 
                this.userForm.get('password').value))
      .subscribe(
        success =>{
            this.msgs.push({severity:'success', summary:'Success', detail: `User ${this.userForm.get('userName').value} succesfully created.`});
        },
        error =>{
          let errorMessage: string = error.???
            this.msgs.push({severity:'error', summary:'Error', detail: `error`});
        }),
        () =>{
          this.loading = false;
        }
  }
}

问号表明方法html之外没有方法建议。

发布该帖子的服务端代码:

  createUser(newUser: UserCreateDTO): Observable<Response> {
    return this.http.post<Response>(this.authUrl + "/user/create", newUser)
            .catch((error:any) =>{
                return Observable.throw(new Error(error.status));
            });
}

谢谢

1 个答案:

答案 0 :(得分:0)

因此标头将在HttpErrorResponse上可用,这是您在.catch中返回的内容,但是您将其标记为any类型,因此不会看到代码建议。在您的服务中尝试catch((error: HttpErrorResponse) =>,以查看可用的内容。

然后,您将HttpErrorResponse替换为一个简单的Error对象,该对象只是将状态作为消息(在错误处理程序的error.message中提供)组件)。我认为您应该在服务中定义所需的错误详细信息,然后在组件中使用error.message