Угловая ошибка http.get с {{responseType: 'text}} - PullRequest
0 голосов
/ 27 марта 2019

Всякий раз, когда я пытаюсь использовать {{requestType: 'text'}} в своем вызове http.get (url), я получаю сообщение об ошибке, которое не удается преобразовать, и разрешены только массивы и итерации;однако я беру свой объект и превращаю его в массив.Мне нужна помощь в понимании моей ошибки и в том, как исправить мою ситуацию

Когда я удаляю 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 Ответ

1 голос
/ 27 марта 2019

На основании json в сообщении об ошибке вам необходимо сделать следующее:

  • Определите интерфейс, я использовал имя INotification. Это определит членов, доступных в десериализованном ответе json.
  • Сильно введите возвращаемые методы метода, а также укажите аргумент универсального типа в http.get<T>. Когда вызывается http.get, он пытается десериализовать ответ json с сервера на граф объектов. Определив INotification[] в качестве возвращаемого типа, дальнейшие вызывающие абоненты, например, из компонента, теперь могут безопасно вызывать члены типа возврата, такие как find или другие члены Array.prototype, а также получать доступ к определенным членам в экземплярах массива.

responseType: 'text' требуется только в том случае, если вы не отправляете ответ от сервера или , когда ответ текстовый, а не json. Первый может произойти с вызовами post или put или delete, когда сервер может отправлять только статус, а тело ответа в ответе отсутствует.

Вот ваш сервисный код, переписанный на основе приведенного выше отзыва.

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;
          });
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...