2016-06-15 26 views
2

Angular 1 JavaScriptサービスをhttpを使用してCORSリクエスト(これはIonicバージョン2を使用しています)を使用してAngular 2 TypeScriptサービスに移動するのに問題があります。 Angular 1では、私はこのようなことをします。CORSを使用してAngular 2サービスを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; 
}]) 

TypeScriptを使用する角度2では、多くのものが変更されました(約束/監視対象)。これまでの私の試みは次のようになります。私はもはや私は角1

  • withCredentials(中https://angular.io/docs/js/latest/api/http/index/RequestOptionsArgs-interface.html#!#withCredentials-anchorRequestOptionsArgsがフィールドwithCredentialsを持っている必要がありますが、私はエラーを取得すると言うことに注意していたものアンギュラ2に対応するかどうかは確信しています

    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); 
        } 
    } 
    

    それはインターフェイスに存在しないことをIDE Visual Studioのコード、イオンはおそらく古い角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; 
    } 
    } 

答えて

1

withCredentailsのサポートが間もなくリリースされる予定Angular2のRC2版に存在するであろう。それはRC1バージョンの一部ではありません...少し待つ必要があります。 RC2付き

、あなたはリクエストのオプションで直接このプロパティを使用することができるようになります:

this.get('...', { withCredentials: true }) 

は、より多くの詳細については、この質問を参照してください。

関連する問題