2017-09-06 2 views
2

J'ai besoin d'aide pour obtenir une réponse de http pendant ngOnInit(). Je mets une alerte ("bonjour") et n'alerte rien. Y a-t-il quelque chose qui ne va pas dans mon code?Impossible d'obtenir une réponse de Http en angulaire

import { Component, OnInit } from '@angular/core'; 
import { Injectable } from '@angular/core'; 
import { Http, Headers, Response } from '@angular/http'; 
import 'rxjs/Rx'; 

@Component({ 
    selector: 'app-dashboard', 
    templateUrl: './dashboard.component.html', 
    styleUrls: ['./dashboard.component.css'] 
}) 

@Injectable() 
export class DashboardComponent implements OnInit { 

    constructor(private http: Http) { } 

    ngOnInit() { 
    let headers = new Headers(); 
    headers.append('Content-Type', 'application/json'); 
    let authToken = localStorage.getItem('auth_token'); 
    headers.append('Authorization', `Bearer ${authToken}`); 

    return this.http 
     .get('http://sampeleposts', { headers }) 
     .map(
     response => { 
      console.log(response); 
      alert("hello"); 
     }, 
     error => { 
      alert(error.text()); 
      console.log(error.text()); 
     } 
    ); 
    } 

} 
+0

Avez-vous recherché des erreurs dans la console? – nitind

+0

@nitind. Theres rien dans la console – Joseph

Répondre

2

On dirait que vous manquez .subscribe()

return this.http 
     .get('http://sampeleposts', { headers }) 
     .subscribe(
     response => { 
      console.log(response); 
      alert("hello"); 
     }, 
     error => { 
      alert(error.text()); 
      console.log(error.text()); 
     } 
    ); 

Voilà comment fonctionne observables. Si vous ne souscrira pas, il ne sera pas exécuté

MISE À JOUR: Voici "how to http" de How to make post request from angular to node server prennent:

import { Component } from '@angular/core'; 
import { HttpClient, HttpHeaders } from '@angular/common/http'; 

@Component({ 
    selector: 'app-root', 
    templateUrl: './app.component.html', 
    styleUrls: ['./app.component.css'] 
}) 
export class AppComponent { 
    user = { id : 1, name : 'Hello'}; 

    constructor(private http: HttpClient) { } 

    callServer() { 
    const headers = new HttpHeaders() 
      .set('Authorization', 'my-auth-token') 
      .set('Content-Type', 'application/json'); 

    this.http.post('http://127.0.0.1:3000/ping', JSON.stringify(this.user), { 
     headers: headers 
    }) 
    .subscribe(data => { 
     console.log(data); 
    }); 
    } 
} 

L'exemple ci-dessus utilise le nouveau '@angular/common/http' expédié à angulaire 4.3+ si comme vous l'avez mentionné dans les commentaires, vous utilisez déjà l'une de ces versions, donc je recommanderais de passer à HttpClient puis.

+0

Où puis-je l'ajouter? Comment est-ce que je l'écris? – Joseph

+0

Merci. il dit maintenant jeton non fourni. Est-ce qu'il y a une erreur dans mes en-têtes, = nouveaux en-têtes(); headers.append ('Content-Type', 'application/json'); laissez authToken = localStorage.getItem ('auth_token'); headers.append ('Autorisation', 'Porteur $ {authToken}'); – Joseph

+0

@Joseph Je viens de mettre à jour la réponse avec quelques détails en utilisant le nouveau '@ angular/common/http' Il montre comment passer' HttpHeaders() 'à droite. Aussi, vous pouvez utiliser 'http interceptors' pour le faire, si vous voulez https://angular.io/guide/http#advanced-usage. – Kuncevic