如何显示来自 angular 8 typescript 订阅的错误消息?

Posted

技术标签:

【中文标题】如何显示来自 angular 8 typescript 订阅的错误消息?【英文标题】:How to display error message from angular 8 typescript subscribe? 【发布时间】:2021-05-25 05:22:00 【问题描述】:

我有一个带有以下自定义异常的 c 锐利后端:

try

  ...

catch (UserDetailAlreadyRegisteredException ex)

  return BadRequest("The user is already registered");
   

此异常返回 - “用户已注册”,它在后端完美运行。

但是当我从前端调用它时,它不显示错误消息,我只得到 [object, object]。当我也尝试记录该对象时,里面没有任何用处。这就是我在前端的称呼:

  onRegisterSubmit(user: User): void 
    this.userService.registerNewUser(user).subscribe(() => 
      this.toastr.success('Registration Completed', 'Success');
    ,
      error => 
        // console.log(error._body);
        this.toastr.error(error, 'Failed');
      
    );
  

有没有办法将消息从后端传递到前端?

【问题讨论】:

你试过console.log(error.error)吗? @MihaiAlexandru-Ionut 是的,我试过了。不工作。 您可以登录error并将内容粘贴到这里吗? 【参考方案1】:

您可以使用状态码拦截错误。将它们发送到 C# 后端

c#

try

  ...

catch (UserDetailAlreadyRegisteredException ex)

Response.StatusCode = (int)HttpStatusCode.InternalServerError;
return BadRequest("The user is already registered");
   

service.ts

我假设您使用的是 Angular 9+。使用RXJS throwError 拦截并发送error observable。

    import  throwError  from 'rxjs';
    
registerNewUser(user)

return this._http.post("url", data)
      .pipe(catchError(this.errorHandler));



    public errorHandler(errorResponse: HttpErrorResponse)  
      //write your own error I am returning response as such
        return throwError(errorResponse);
      

component.ts

onRegisterSubmit(user: User): void 
    this.userService.registerNewUser(user).subscribe(() => 
      this.toastr.success('Registration Completed', 'Success');
    ,
      (error) => 
        // console.log(error._body);   **//this block gets activated at error**
        this.toastr.error(error, 'Failed');
      
    );
  

【讨论】:

以上是关于如何显示来自 angular 8 typescript 订阅的错误消息?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Angular 11中显示来自另一个组件的模态组件

如何在 Angular 中轻松显示来自 MongoDB 的代码数组?

Django 和 AngularJS:如何显示来自 Django 调试错误消息的 Angular $http 错误

Angular 8 - 如何使用 ngxbootstrap/datepicker 仅显示日期和月份

如何在 Angular 8 和 Angular 材料中单击 sidenav 中的菜单时在侧栏旁边显示我的组件

如何显示“未找到结果”,如果在表中未找到数据-Angular 8