web-dev-qa-db-fra.com

Angular 4 Objet RequestOption non assignable pour la méthode post

J'ai des problèmes avec ces codes, j'ai créé un en-tête avec le bloc de code suivant

headers.append("Authorization",btoa(username+":"+password));

var requestOptions = new RequestOptions({headers:headers});

Mais si j'essaie d'utiliser ceci dans une méthode de publication dans ce

return this.http.post(url,JSON.stringify({username,password}),requestOptions)
    .map(res=>res.json())
    .map(res=>{
      if(res){
        localStorage.setItem("isLogged",res);
        this.loggedIn =true;
      }
      return res;
    });

Je prends ce message d'erreur

TypeScript Error
Argument of type 'RequestOptions' is not assignable to parameter of type '{ headers?: HttpHeaders | { [header: string]: string | string[]; }; observe?: "body"; params?: Ht...'. Types of property 'headers' are incompatible. Type 'Headers' is not assignable to type 'HttpHeaders | { [header: string]: string | string[]; }'. Type 'Headers' is not assignable to type '{ [header: string]: string | string[]; }'. Index signature is missing in type 'Headers'.

J'ai essayé de changer Header () en HttpHeader () mais cela n'a pas aidé. Quel est le problème?

MIS À JOUR

J'ai supprimé l'objet requestOptions puis j'ai créé des en-têtes à partir de HttpHeaders ()

let headers = new HttpHeaders();

et utiliser cette valeur d'en-tête dans la méthode post en ce que

return this.http.post(url,JSON.stringify({username,password}), { options: { headers: headers; } })
    .map(res=>res.json())
    .map(res=>{
      if(res){
        localStorage.setItem("isLogged",res);
        this.loggedIn =true;
      }
      return res;
    });

alors obtenir cette erreur

[ts]
Argument of type '{ options: { headers: HttpHeaders; }; }' is not assignable to parameter of type '{ headers?: HttpHeaders | { [header: string]: string | string[]; }; observe?: "body"; params?: Ht...'.
  Object literal may only specify known properties, and 'options' does not exist in type '{ headers?: HttpHeaders | { [header: string]: string | string[]; }; observe?: "body"; params?: Ht...'.

J'ai aussi essayé ça

return this.http.post(url,JSON.stringify({username,password}), { headers: headers })
    .map(res=>res.json())
    .map(res=>{
      if(res){
        localStorage.setItem("isLogged",res);
        this.loggedIn =true;
      }
      return res;
    });

alors j'ai eu une erreur sur le premier ".map"

[ts] Property 'map' does not exist on type 'Observable<Object>'.
3
Umut Gür

La classe RequestOptions devait être utilisée avec le module obsolète Http, et puisque vous obtenez cette erreur, je suppose que vous utilisez le module HttpClient

Si vous souhaitez définir headers à options comme indiqué dans votre code, vous pouvez utiliser quelque chose comme ceci (version simplifiée de ce qui est affiché dans le Angular docs ):

request(url, { body }, { options: { headers?: HttpHeaders; } })

Cependant, vous pouvez également définir headers directement, sans utiliser d'options. Cela ressemblerait à ceci:

    request(url, { body }, { headers?: HttpHeaders; } )
4
bazzells

@ angular/http est obsolète

Utilisez @ angular/common/http à la place 

import { HttpHeaders } from '@angular/common/http';

const httpOptions = {
     headers: new HttpHeaders({
     'Content-Type':  'application/json',
     'Authorization': 'my-auth-token'
    })
};


addHero (hero: Hero): Observable<Hero> {
     return this.http.post<Hero>(this.heroesUrl, hero, httpOptions)
     .pipe(
      catchError(this.handleError('addHero', hero))
    );
}
2
Peter Kovacs

Dans les services

En passant simplement plusieurs arguments

export interface Doctor {

       license1d1: number;
       firstname1: string;
       experience1: number;
       fee1: number;
       qualification1: string;
       lastname1: string;
       specialization1: string;    }






     getDoctorsBydepartment(Hosp: number, Dept: number): Observable<Doctor[]> {

           const url = 'http://192.168.75.15:8080/Booking/rest/List.do?' 
           ClinicID='+Hosp+'&DeptID='+Dept;
           return this.http.get<Doctor[]>(url).pipe()

        }
0
Akhil Babu
import {
    Http,
    Response,
    Headers,
    RequestOptions
 } from '@angular/http'; 

private headers = new Headers({
    'Content-Type': 'application/json',
    'Authorization': localStorage.getItem('token')
  });
  private options = new RequestOptions({
    headers: this.headers
  });

private user: User;

constructor(private _http: Http) {}

getUserService() {
    return this._http.get(this.baseUrl + '/user', this.options)
      .map((response: Response) => response.json(),
      error => error.json('erreur dans lurl'));
  }
0
Anis Mokeddes