В настоящее время я работаю над переносом нашего приложения с Angular 4 на Angular 5. У меня есть файл, который обрабатывает любой пост-запрос, и метод post выглядит следующим образом:
public post = (data: any, url = '', header: any = null, mapToJson = false): any => {
if (mapToJson) {
return this.commonHttpService.post(url, data, header)
.map(this.extractData)
.map((response: Response) => response.json());
} else {
return this.commonHttpService.post(url, data, header)
.map(this.extractData)
.map((response: Response) => response);
}
}
Это вызов общего метода службы http, который записан в другом файле, где я создаю запрос Http и добавляю заголовки, параметры и параметры в запрос. В опциях нам нужно указать тип ответа, поэтому я добавил «json» в качестве типа ответа. Но некоторые веб-сервисы могут возвращать текст, блоб или любой другой контент. Вот как я объявил опции в запросе:
httpOptions = {
body: body,
headers: req.headers,
observe: 'response',
params: params,
reportProgress: false,
responseType: 'json',
withCredentials: true,
};
request = this.http.request('POST', url, httpOptions);
Поэтому, когда я получаю тип ответа как «Текст» или «Blob», сопоставление не выполняется. Он ищет структуру json, но, поскольку я получаю ответ как «Успех», я получаю сообщение об ошибке синтаксического анализа. Есть ли способ указать несколько типов ответов в настройках. Как и для «responseType» внутри httpOptions, я хотел бы передать несколько значений, таких как «json» | «текст» | «Клякса». Или мы можем указать тип ответа динамически? Я искал ответы онлайн и не смог найти лучшего подхода для этого.