Angular2 - HTTP RequestOptions HEADERS
Asked Answered
K

4

74

I currently have an issue with tslint and was hoping someone could point me in the right direction.

I'm trying to send an HTTP GET request using HTTP provided by the Angular2 framework. With this request, I must specify the content-type and the bearer authentication token.

Example of my 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) => {

This works, however, tslint is complaining that

"TS2345: Argument of type '{ headers: Headers; }' is not assignable to parameter of type 'RequestOptionsArgs'. Types of property 'headers' are incompatible. Type 'Headers' is not assignable to type 'Headers'. Two different types with this name exist, but they are unrelated. Property 'keys' is missing in type 'Headers'."

I appreciate the support.

Kingsly answered 4/4, 2017 at 11:11 Comment(1)
consider use const instead of let for both options and headersKanya
P
201

Update

As of today, @angular/http has been deprecated, and @angular/common/http should be used instead. So the best way to work with http headers is to import import { HttpHeaders } from '@angular/common/http'; (documentation).

Old answer

The Headers type you are supposed to import is import { Headers } from '@angular/http';.

Check your imports

Pelt answered 4/4, 2017 at 11:15 Comment(7)
That was it! I'm using Phpstorm and is usually pretty good and clearly showing me that I've missed a dependency but didn't this time. Furthermore, I don't find the tslint message very clear. Cheers :)Kingsly
Somehow there is a Headers class even if you don't import it. So you have to make sure you import the right one (see answer above) in order for it to work.Adscititious
For Angular 5, this helped me import { Headers, RequestOptions } from '@angular/http'; DOCUMENTATIONHandcraft
@Handcraft It says in the docs that Headers is deprecated and we should use HttpHeaders from @angular/common/http instead. But that doesn't really work... Thoughts?Galvanometer
@Galvanometer I find THIS as a good referrenceHandcraft
@angular/common/http"' has no exported member 'Http'. every article says differentBritain
/@angular/common/http"' has no exported member 'Headers'. wtfBritain
V
9

You have to update headers by:

let headers =  {headers: new  HttpHeaders({ 'Content-Type': 'application/x-www-form-urlencoded'})};
Voodooism answered 22/1, 2018 at 6:49 Comment(0)
A
4

Update for Angular 5

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

I found this in the comments from the correct answer, so If this helps somebody, good luck.

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

Adiaphorism answered 12/4, 2018 at 15:34 Comment(2)
This is deprecated.Seethe
Yeah, it looks like it had change in the last days. check the documentation, now is import { RequestOptions } from '@angular/http';Adiaphorism
R
2

// example of headers of content type 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)));
Redeploy answered 25/2, 2019 at 13:37 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.