2016-12-07 4 views
0

私はCartService.tsでangular2ang2からnode.jsへのhttp.get()リクエストを使用して、未定義のデータがありますか?

からNode.jsのためにhttp.get()要求しようとしています。..

@Injectable() 
export class CartService { 

    private CartUrl: string = '../cart'; // URL to Web API 
    private headers: Headers = new Headers({'Content-Type': 'application/json'}); 

    constructor(private http: Http) {} 

    public getCart(): Promise<Cart> { 
     return this.http.get(this.CartUrl) 
      .toPromise() 
      .then(response => response.json().data as Cart) 
      .catch(this.handleError); 
    } 


    public handleError(error: any): Promise<any> { 
     console.error('An error occurred', error); 
     return Promise.reject(error.message || error); 
    } 

}

とapp.component.ts ...

export class AppComponent implements OnInit { 
    constructor (private cartService: CartService){} 

    cart : Lecture[] = []; 
     DBinfo : Cart; 


    ngOnInit(): void { 
     this.getCart(); 
    } 

    private getCart() : void{ 
     this.cartService.getCart() 
       .then(DBinfo => this.DBinfo = DBinfo , 
        ()=>console.log("The data is... "+this.DBinfo)); 

} 

とindex.js nodejsから

..

router.get('/cart', function (req, res,next) { 

    var cart = { 
     "email": "[email protected]", 
     "item" : "bread" 
    }; 

    res.json(cart); 
}); 

ngOnInitがthis.getCart()、
console.log( "this is ..." + this.DBinfo))で実行されたとき。
"データは...未定義です"

node.js ..から正確にデータを取得するにはどうすればよいですか?
then()からこの:)

答えて

0

2番目のコールバックを読んで、あなたの時間のためのおかげで、エラーコールバックです!

.then(data => ..., err => console.log(err));

2番目のコールバックが実行されると、リクエスト中にエラーが発生したようです。

とのNode.jsからあなた返されたオブジェクトにはdataプロパティがありません:

.then(response => response.json() as Cart)

私はObservablesを使用しますが、これはトリックを行う必要があります。

public getCart(): Observable<Cart> { 
    return this.http.get(this.CartUrl) 
     .map(response => response.json() as Cart) // NO '.data' !!?? 
     .catch(this.handleError); 
} 

public handleError(error: any) { 
    console.error('An error occurred', error); 
    return Observable.of(null); 
} 

private getCart(): void { 
    this.cartService.getCart() 
     .subscribe(DBinfo => this.DBinfo = DBinfo, 
       err => console.log(err), 
       () => console.log('done')); 
} 
+0

私はそれを修正し '() => console.log( "データは... + this.DBinfo);' 'err => console.log(err)'にしてから、後でconsole.log(DBinfo)にしようとしましたが、同じ結果が表示されます。 .. – highalps

+0

ええ、しかし、何かエラーが印刷されますか? – mxii

+0

最初のコールバックに 'console.log'を追加します:' data => {console.log(data); this.data = data; } ' – mxii

関連する問題