如果 Angular2 HTTP 响应数据不符合类型,我如何捕获错误

Posted

技术标签:

【中文标题】如果 Angular2 HTTP 响应数据不符合类型,我如何捕获错误【英文标题】:How do I capture error if Angular2 HTTP response data does not adhere to type 【发布时间】:2017-06-20 22:25:28 【问题描述】:

如果我使用类型创建 Angular2 HTTP 请求,然后分配一个特定类型的响应,如果服务器响应不是该类型,那么我可以捕获错误而不是中断应用程序并执行活动吗?

....接口.....

export interface loginUser 
    username: string;
    password: string;


export interface loginResData 
    username: string;
    details: string;

...组件代码.....

user: loginUser
 constructor(private _httpprovider: Httpprovider, private _router: Router) 

   

  login(user) 
    this._httpprovider.httpReq(this.url, 'POST', user, null).subscribe((data: loginResData) => 
      this.loginEvent.emit(data);
    );
  

如何捕获发生在类型数据之外的数据上的错误:loginResData。一开始有可能吗?

【问题讨论】:

【参考方案1】:

接口在运行时被忽略。你最好创建一个类似的类

   export class loginResData 
     username: string;
     details: string;
     constructor(data:any) 
       if(data && data.username && data.details) 
         this.username = data.username;
         this.details = data.details;
       
       throw 'loginResData is invalid or incomplete';
     
   
  login(user) 
    this._httpprovider.httpReq(this.url, 'POST', user, null)
    .map(data:any => new oginResData(data))
    .subscribe((data: loginResData) => 
      this.loginEvent.emit(data);
    );
  

【讨论】:

好的,太棒了。谢谢。

以上是关于如果 Angular2 HTTP 响应数据不符合类型,我如何捕获错误的主要内容,如果未能解决你的问题,请参考以下文章

Angular2 http observables - 如何使用未定义的类型

Angular 2:无法访问 http 请求中的响应标头

Angular 2 Http 获取响应示例

Angular2处理http响应

Angular2 HTTP GET - 将响应转换为完整对象

Angular2入坑指南——管道(搜索功能)