Я нахожусь в процессе обновления углового приложения с версии 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' не существует для типа '{}'.
Как это следует исправить ???