在用户创建后响应之后,我想处理来自服务器的任何错误响应。该帖子在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));
});
}
谢谢
答案 0 :(得分:0)
因此标头将在HttpErrorResponse
上可用,这是您在.catch中返回的内容,但是您将其标记为any
类型,因此不会看到代码建议。在您的服务中尝试catch((error: HttpErrorResponse) =>
,以查看可用的内容。
然后,您将HttpErrorResponse
替换为一个简单的Error
对象,该对象只是将状态作为消息(在错误处理程序的error.message
中提供)组件)。我认为您应该在服务中定义所需的错误详细信息,然后在组件中使用error.message
。