У меня сервер NodeJS, развернутый в IBM Cloud (Bluemix), в котором служба Restful предоставляется с использованием HTTPS.Сервер также ожидает токен носителя, установив заголовок авторизации.
Сервер работает, и я могу делать тестовые вызовы, используя POSTMAN.Сервер возвращает ожидаемый ответ, когда токен доступен или нет.
Мне не удалось заставить мое приложение Ionic (Ionic 4.1.2) успешно вызвать службу из-за проблем с заголовком Authorization.
Я использую HttpClient
следующим образом:
import { Injectable } from '@angular/core';
import {HttpClient, HttpHeaders} from "@angular/common/http";
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/timeout';
@Injectable()
export class MyService {
accessToken = 'here my bearer token';
url = 'https://mydeployedproject.eu-gb.mybluemix.net/api/myserviceendpoint';
constructor(private httpClient:HttpClient) {
}
getResultsFromBackend() {
console.log('Calling restful service: ' + url);
const headers = new HttpHeaders({
'Accept': 'application/json',
'accept-language':'en-eu',
'Authorization':'Bearer mybearertoken'
});
var response = this.httpClient.get(url,{headers})
.subscribe(response => console.log(response));
return response;
}
Обратите внимание: со стороны службы я могу отладить заголовок, и я вижу, что заголовки Accept и accept-languageустановлены правильно, когда заголовок содержит только Accept
и accept-language
.
При добавлении заголовка Authorization
вызов get прерывает поток, и вызов get не выполняется правильно, не сервер.
В настоящее время я тестирую с помощью эмулятора iOS с ionic cordova emulate ios --livereload -lc
На стороне сервера , я использую следующее, чтобы разрешить CORS
// CORS (Cross-Origin Resource Sharing) headers to support Cross-site HTTP requests
app.all('*', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
next();
});