带有{{responseType:'text}}的角度http.get错误

时间:2019-03-27 17:23:58

标签: angular typescript http rxjs

每当我尝试在http.get(url)调用中使用{{requestType:'text'}}时,都会收到一个错误,我无法进行区分,并且仅允许数组和可迭代对象;但是,我正在拿我的对象并将其转换为数组。我需要一些帮助来了解我的错误以及如何解决我的情况

当我删除RequestType时,数组不会出现任何问题,并显示在前端。

----service-----

 getAll(){
    const requestOptions: Object = {
      /* other options here */
      responseType: 'text'
    }
    return this.http.get<any>(this.url, requestOptions);
} 

---component .ts----- 

notificationsFass: any[];

  constructor(route: ActivatedRoute, private metaService: Meta, private notificationService: NotificationsFassService) {
    this.notificationsFass = [];
}


ngOnInit() {
    this.notificationService.getAll()
      .subscribe(notificationsFass => {
        this.notificationsFass = notificationsFass;
      }
        );
}

---html---

<div *ngFor="let m of notificationsFass">

---error----
ERROR Error: Error trying to diff '[{"incidentNumber":700,"createdByName":"FASS Notification","createdDate":"2019-03-27T09:18:15.000+0000"}]'. Only arrays and iterables are allowed

1 个答案:

答案 0 :(得分:1)

基于错误消息中的json,您需要执行以下操作:

  • 定义接口,我使用了名称INotification。这将定义反序列化json响应上可用的成员。
  • 严格键入方法的返回类型,并在http.get<T>中提供泛型类型参数。调用http.get时,它将尝试反序列化从服务器到对象图的json响应。通过将INotification[]定义为返回类型,其他调用者(例如来自组件)现在可以安全地调用返回类型(如find或其他Array.prototype成员,以及访问实例中的已定义成员)。数组。

responseType: 'text'仅在您未从服务器发出或从服务器发出 响应时才需要,而该响应是文本而不是json。前者可以通过postputdelete调用发生,其中服务器可能仅发送状态而响应中没有消息正文。

这是根据上述反馈重写的服务代码。

notificationsFassService.ts

export interface INotification {
    incidentNumber: number;
    createdByName: string;
    createdDate: string;
}

export class NotificationsFassService {
    constructor (private readonly http: HttpClient) { }

    getAll():Observable<INotification[]> {
        return this.http.get<INotification[]>(this.url);
    } 
}

notificationsFassComponent.ts

export class NotificationsFassComponent implements OnInit {
    notificationsFass: INotification[];

    constructor(route: ActivatedRoute, private metaService: Meta, private notificationService: NotificationsFassService) {
        this.notificationsFass = [];
    }

    ngOnInit() {
        this.notificationService.getAll()
          .subscribe(notificationsFass => {
             this.notificationsFass = notificationsFass;
          });
    }
}