2017-04-14 1 views
0

postで説明したMicrosoft.AspNetCore.SpaTemplatesをインストールし、dotnet new angularを使用して新しいプロジェクトを作成しました。ベースサイトを稼働させて、うまく走っています。私はVisual Studio 2017を使用しています。Angular + .NETコアMVCアプリケーションでObservableを購読するときに "SyntaxError:予期しないトークン<JSON内の位置0"を取得

シンプルなhttp getでサービスを追加しました。データは正常に戻ってきます。私はObservableとして呼び出し元に返します。そこからObservableを購読し、データで何かをします。私が観察を購読する場合は、問題が立ち上がるところだ...、それは文句:

Exception: Call to Node module failed with error: SyntaxError: Unexpected token < in JSON at position 0 

私が購読を追加そのようにそれが実行されることを購読し、せずに最初のサイトを実行すると奇妙なことがあります、HMRそれは何か、ブラウザを更新し、すべてがうまくいく。しかし、その後にブラウザを手動でリフレッシュするか、サイトを再実行しようとするたびに、エラーがスローされます。

コード:


home.component.ts:

import { Component, OnInit } from '@angular/core'; 
import { HomeService } from './home.service'; 

@Component({ 
    selector: 'home', 
    templateUrl: './home.component.html' 
}) 
export class HomeComponent implements OnInit { 

    constructor(private homeService: HomeService) {} 

    ngOnInit(): void { 
     this.homeService.getData(5) 
      .subscribe(res => console.log(res)); 
    } 
} 

home.service.ts

import { Injectable } from '@angular/core'; 
import { Http, Response } from '@angular/http'; 
import { Observable } from 'rxjs/Observable'; 
import 'rxjs/add/operator/map'; 


@Injectable() 
export class HomeService { 
    private _apiUrl = 'http://localhost:1234/api'; 

    constructor(private http: Http) { } 

    getData(count: number): Observable<any> { 
     return this.http 
      .get(`${this._apiUrl}/Foo/${count}`, { withCredentials: true }) 
      .map(response => response.json()) 
    } 
} 

私は、Web APIからのデータが有効なJSONであることを知っています。失敗する部分はObservableを購読しようとするときです。なぜそれが不平を言っているのかわかりません。私が次のようなことをすれば:

ngOnInit(): void { 
    console.log('observable', this.homeService.getData(5)); 
} 

..それではObservableオブジェクトをコンソールに出力します。

アイデア?

+0

あなたのapiはおそらく 'response.json()'を呼び出すことによってこのエラーをスローしてjasonデータを返さないでしょう。応答本体をjsonに変換していませんobservable mapのresponse.bodyをコンソールにしようとします –

+0

私のデータにアクセスしているときローカルでは、私のapiUrlはlocalhostの情報を含んでいません。私の場合、このように見えます: 'private baseUrl = 'api/products';'単にURLを 'api'に変更するとどうなりますか? – DeborahK

+0

@BabarBilal私がresponse.bodyを使用すると、 "プロパティ 'body'がタイプ 'Response'に存在しないというエラーが発生します。私は郵便配達でそれをテストするときapiが有効なJSONを返すことを知っています.. [{"var1":123、...}] – Jerms

答えて

0

私は@ DeborahKの角度ルーティングレポを観察可能な例で探していて、呼び出し側でエラーを処理していないことを認識しました。

私はこのようなコンポーネントのコードを変更:

this.homeService.getData(5) 
    .subscribe(
     (res) => console.log(res), 
     (err) => console.log(err) 
    ); 

と、もはやエラーが表示されます。ありがとう!

関連する問題