2016-10-06 7 views
2

http:// TUTORIALとその他の最新のリソースに続いて、簡単なGET要求を角2でHttpで実行しようとしています。angular2でhttp.getを実行できません

あなたは、私はいくつかの組み合わせを試してみましたとして、多くのコメントがある見ることができるように成功したHTTPコンポーネントを注入した後、私は次のコード

constructor(@Inject(Http) /* remove @Inject once @Injectable works */ public http:Http){ 
     http.get('https://api.travis-ci.org/config').toPromise().then((response => console.log(response.json().data)) 
     //  .map(res => res.text()) 
     //  .subscribe(
     //  data => console.log(data), 
     //  err => console.error(err), 
     // () => console.log('Random Quote Complete') 
     //); 
    } 

を書きました。私はこれらのエラーに

http.get(...)を取得しています。私は、地図

リクエストヘッダフィールドXを使用しようとするとマップが関数(...)

ではありません-XSRF-TOKENは、プリフライト応答でAccess-Control-Allow-Headersによって許可されていません。

たとえば、(toPromise)などです。

どうすればいいですか?

fetchを使用している場合は、コールが動作しているので、角度のあるものでなければなりません。

+0

CORS要求を許可するようにサーバーを設定する必要があります。エラーメッセージに記載されているヘッダーは、ブラウザーによって予期されているか、要求を拒否します。 –

+0

私はtravis apiを使用しています。 CORSに対応しています。 –

答えて

2

「Promise」に関連付けられたメソッドマップ()はありません。 リンクを確認してくださいAngular 2 HTTP GET with TypeScript error http.get(...).map is not a function in [null]

私はあなたの問題を解決しました。ここで私はオブザーバー/サブスクライバパターンを使用しました。

rxjs-operators.ts

import 'rxjs/add/operator/catch'; 
import 'rxjs/add/operator/map'; 
import 'rxjs/add/observable/throw'; 

トラヴィス・service.ts

import { Injectable }  from '@angular/core'; 
import { Http, Response } from '@angular/http'; 
import { Observable }  from 'rxjs/Observable'; 
import './rxjs-operators'; 

@Injectable() 
export class TravisService { 
    constructor (private http: Http) {} 

    getData(): Observable<any> { 
    return this.http.get('https://api.travis-ci.org/config') 
        .map(this.extractData) 
        .catch(this.handleError); 
    } 

    private extractData(res: Response) { 
    let body = res.json(); 
    return body || {}; 
    } 

    private handleError (error: any) { 
    let errMsg = (error.message) ? error.message : 
     error.status ? `${error.status} - ${error.statusText}` : 'Server error'; 
    return Observable.throw(errMsg); 
    } 
} 

そして、あなたは以下のコードを使用してデータを登録することができます:あなたは、次のコードを確認してください。

travis.component.ts

import { Component, OnInit, } from '@angular/core'; 
import { TravisService }  from './travis-service'; 

@Component({ 
    selector: 'travis-app', 
    templateUrl: 'app/travis-app.component.html', 
    providers: [TravisService] 
}) 
export class TravisComponent implements OnInit { 
    errorMessage: string; 
    constructor(private travisService: TravisService) { } 
    ngOnInit() { 

     this.travisService.getData().subscribe(
      data => { 
       console.log(data); 
      }, 
      error => this.errorMessage = <any>error 
     ); 
    } 

} 
+0

Observableを追加すれば十分でした。ありがとう!この特定の行を回答に追加し、残りをTLDRとマークできますか? これは実際にはangleのクイックスタートで言及されていますが、そのページのすべての情報が混乱しているため気づきにくいです。 'rxjs'からの 'import {Observable};'はhttps://angular.io/docs/ts/latest/tutorial/toh-pt6.html –

+0

にあります。 'rxjs 'からのimport {Observable};'私のために働かなかった。しかし、 'rxjs/Rx 'から' import {Observable}'を追加すると、それは動作します。 Iamはnpmのrxjs-5.0.0-beta.12バージョンを使用しています。 –

1

あなたは本番でこれを使用すべきではありません

export class NoXSRFStrategy implements XSRFStrategy { 
    configureRequest(req: Request) {} 
} 
@NgModel({ 
    providers: [{provide XSRFStrategy, useClass: NoXsrfStrategy}], 
    ... 
}) 

を試すことができます。 トラビスが見逃しているようですAccess-Control-Allow-Headers"X-XSRF-TOKEN"

関連する問題