74 votes

Angular2 - HEADERS HTTP RequestOptions

J'ai actuellement un problème avec tslint et j'espérais que quelqu'un pourrait m'indiquer la bonne direction.

J'essaie d'envoyer une requête HTTP GET en utilisant le protocole HTTP fourni par le framework Angular2. Avec cette requête, je dois spécifier le content-type et le jeton d'authentification du porteur.

Exemple de mon code :

let headers = new Headers();
let authToken = this._user.getUser().JWT;
headers.append('Content-Type', 'application/json');
headers.append('Authorization', `Bearer ${authToken}`);
let options = new RequestOptions({ headers: headers });

this._http.get('http://' + url '/', options)
            .timeout(3000)
            .subscribe(
                (res) => {

Cela fonctionne, cependant, tslint se plaint que

"TS2345 : Argument de type '{headers : Headers ; }' n'est pas assignable à un paramètre de type paramètre de type 'RequestOptionsArgs'. Les types de la propriété 'headers' sont sont incompatibles. Le type 'Headers' n'est pas assignable au type 'Headers'. Il existe deux types différents portant ce nom, mais ils ne sont pas liés. La propriété 'keys' est absente du type 'Headers'."

J'apprécie le soutien.

0 votes

Envisager d'utiliser const au lieu de let pour les options et les en-têtes

201voto

bviale Points 3964

Mise à jour

A partir d'aujourd'hui, @angular/http a été déprécié et @angular/common/http doit être utilisé à la place. Ainsi, la meilleure façon de travailler avec des en-têtes http est d'importer import { HttpHeaders } from '@angular/common/http'; ( documentation ).

Ancienne réponse

El Headers que vous êtes censé importer est import { Headers } from '@angular/http'; .

Vérifiez vos importations

3 votes

C'était ça ! J'utilise Phpstorm qui est habituellement assez bon et me montre clairement que j'ai manqué une dépendance, mais ce n'était pas le cas cette fois-ci. De plus, je ne trouve pas le message de tslint très clair. Merci :)

3 votes

D'une manière ou d'une autre, il existe une classe Headers même si vous ne l'importez pas. Vous devez donc vous assurer que vous importez la bonne classe (voir la réponse ci-dessus) pour que cela fonctionne.

3 votes

Pour Angular 5, ceci m'a aidé import { Headers, RequestOptions } from '@angular/http'; DOCUMENTATION

9voto

Vivek Kapoor Points 81

Vous devez mettre à jour les en-têtes par :

let headers =  {headers: new  HttpHeaders({ 'Content-Type': 'application/x-www-form-urlencoded'})};

4voto

ValRob Points 573

Mise à jour pour Angular 5

import { RequestOptions } from '@angular/http';

J'ai trouvé ceci dans les commentaires de la bonne réponse, donc si cela peut aider quelqu'un, bonne chance.

Documentation : https://angular.io/api/http/RequestOptions

2 votes

Cette fonction est obsolète.

0 votes

Oui, il semble qu'il ait été modifié ces derniers jours. Vérifiez la documentation, qui est maintenant la suivante import { RequestOptions } from '@angular/http';

2voto

arul prince Points 111

// exemple d'en-têtes de type de contenu Json

import { Http, Headers, RequestOptions } from '@angular/http';

const Url = 'http://localhost:3000/';
const headers = new Headers;
const body = JSON.stringify({
title: "data" 
});
headers.append('Content-Type', 'application/json');
this.http.post(Url, body, { headers: headers })
.pipe(map((res => res)));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X