У меня возникли проблемы с переносом службы JavaScript с угловым 1 в службу Anglo 2 TypeScript с использованием http для запроса CORS (это использует Ionic version 2). В Angular 1 я делаю что-то вроде этого.Как написать услугу «Угловая 2» с помощью CORS in Ionic?
angular.module('app.services',[])
.factory('LoginService', ['$http', function($http) {
var service = {};
service.isUserLoggedIn = function() {
var restUrl = 'http://10.10.10.25:8080/api/user/isloggedin';
var options = {
method: 'GET', url: restUrl, withCredentials: true,
headers: {
'x-request-with': 'XMLHttpRequest',
'x-access-token': 'sometoken'
}
};
return $http(options);
};
return service;
}])
В Angular 2, используя TypeScript, многое изменилось (Promises/Observables). Моя попытка пока выглядит следующим образом.
import { Injectable } from '@angular/core';
import { Headers, Http, Response, RequestMethod, RequestOptionsArgs } from '@angular/http';
import { Observable } from 'rxjs/Observable';
@Injectable()
export class LoginService {
constructor(private _http:Http) {
}
isLoggedIn():boolean {
var r:any;
var e:any;
let url = 'http://10.10.10.25:8080/api/user/isloggedin';
let options:RequestOptionsArgs = {
url: url,
method: RequestMethod.Get,
search: null,
headers: new Headers({
'Content-Type': 'application/json',
'X-Requested-With': 'XMLHttpRequest',
'x-access-token' : 'sometoken'
}),
body: null
};
this._http.get(url, options).map(this.extractData).catch(this.handleError)
.subscribe(
response => { r = <any>response; console.log(r); },
error => { e = <any>error; console.log(e); });
return false;
}
private extractData(response:Response) {
let body = response.json();
return body.data || { };
}
private handleError(error:any) {
let errMsg = (error.message) ? error.message :
error.status ? `${error.status} - ${error.statusText}` : 'Server error';
console.log('error = ' + errMsg);
return Observable.throw(errMsg);
}
}
Я больше не знает, как обратиться в угловых 2, что я имел в угловом 1
- withCredentials (обратите внимание, что https://angular.io/docs/js/latest/api/http/index/RequestOptionsArgs-interface.html#!#withCredentials-anchor говорит
RequestOptionsArgs
должен иметь полеwithCredentials
, но я получаю сообщение об ошибке в IDE Visual Studio Code говорит, что он не существует в интерфейсе; возможно, ионный использует более старую версию с угловым 2?) заголовки (x-request-with и x-access-token)фактический ответ
я сделал немного больше поиска, и я был в состоянии понять, как вставить заголовки и правильно обрабатывать подписки. Тем не менее, withCredentials по-прежнему является проблемой.
Я нашел это сообщение angular2 xhrfields withcredentials true и изменил свой конструктор следующим образом. Он работает сейчас.
constructor(@Inject(Http) private _http:Http) {
let _build = (<any> _http)._backend._browserXHR.build;
(<any> _http)._backend._browserXHR.build =() => {
let _xhr = _build();
_xhr.withCredentails = true;
return _xhr;
}
}