при использовании углового 5 httpclient, переход от response.json () на простой ответ вызывает ошибку компиляции - PullRequest
0 голосов
/ 21 ноября 2018

Я нахожусь в процессе обновления углового приложения с версии 4 до 5 и использования httpclient.Однако, когда я пытаюсь изменить response.json () на просто response, но он не компилируется

, у меня есть служба отдыха, которая обрабатывает все вызовы get и post

        import { Injectable } from '@angular/core'
        import { Response } from '@angular/http';
        import { HttpClient, HttpHeaders } from '@angular/common/http';
        import { Headers, RequestOptions } from '@angular/http';
        import { Error } from './Error';
        import { Router } from '@angular/router';
        import { Observable } from 'rxjs/Rx';
        import { LocalStorageWrapperModule } from '../../core/services/local-storage-module.service';

        const httpOptions = {
            headers: new HttpHeaders({ 'Content-Type': 'application/json; charset=UTF-8' })
        };

        @Injectable()
        export class RestModuleService {
            private self: any;
            private observable: any;

            constructor(private httpService: HttpClient, private router:Router, private storage:LocalStorageWrapperModule) {
                this.self = this;
            }

            get(inURL, config = undefined) {
                let headers, options;
                if (config){
                    options = config;
                } else {
                    options = httpOptions;
                }

                let action = this.httpService.get(inURL, options);
                return new Promise((resolve, reject) => {
                    action.subscribe(
                        response => resolve(response),
                        error => {
                            this.interceptError(error);
                            reject(error);
                        }
                    );
                });
            }

            post(inURL, data, config = undefined) {
                let headers, options;
                if (config){
                    options = config;
                } else {
                    options = httpOptions;
                }
                options = { ...options, observe: 'response' };

                let action = this.httpService.post(inURL, data, options);
                return new Promise((resolve, reject) => {
                    action.subscribe(
                        response => resolve(response),
                        error => {
                            this.interceptError(error);
                            reject(error);
                        }
                    );
                });
            }
        }

.потребляя оставшуюся службу для выполнения вызова API здесь

        import { Injectable } from '@angular/core';
        import { RestModuleService } from '../../../../shared/services/rest-module.service';
        import { InternalErrorService } from '../../../../shared/services/internal-error.service';
        import * as Utilities from '../../../../shared/services/utilities';

        const VIEW_API_BASE = Utilities.vlsiURLWithHost();

        @Injectable()
        export class BasicInfoService {
            constructor(
                private restService: RestModuleService,
                private internalError: InternalErrorService
            ) {}

            getPerformanceBasicInfo(sessionId) {
                const url = BASE + 'perf/getDiProtocolData';
                let data = {
                    id: sessionId
                };
                return this.restService.post(url, JSON.stringify(data))
                    .then((response: Response) => response.json())
                    .catch((error) => this.internalError.show());
            }
        }

Я изменил это, чтобы отправить response.body, так как почтовый вызов дает полный ответ, включая заголовки

         getPerformanceBasicInfo(sessionId) {
                const url = BASE + 'perf/getDiProtocolData';
                let data = {
                    id: sessionId
                };
                return this.restService.post(url, JSON.stringify(data))
                    .then((response) => response.body)
                    .catch((error) => this.internalError.show());
            }

Еще одинметод

     getSiteList(): Promise<SiteInfo[]> {
    const url = BASE + '/site/list';
    return this.restService.get(url)
        .then((response: Response) => {
            return response.json().map((s: SiteInfo) => {
                s.numPods = s.pods && s.pods.length || 0;
                return s;
            })
        }).catch(error => this.internalError.show());
}

Здесь ответ jsonified, а затем мы используем .map, но как только я удаляю .json (), он снова выдает ошибку компиляции, что .map не является функцией ответа

он не может быть скомпилирован по причине, по которой [ts] свойство 'body' не существует для типа '{}'.

Как это следует исправить ???

...