【问题标题】:Getting error trying to pass request options尝试传递请求选项时出错
【发布时间】:2018-05-22 00:39:02
【问题描述】:

我有这样的服务:

   import { Injectable } from "@angular/core";
import { Http, Response, Headers, RequestOptions } from "@angular/http";
import "rxjs/add/operator/map";
import { Usuario } from "../_models/usuarios";
import { HttpClient } from "@angular/common/http";
import { Observable } from "rxjs/Observable";
import { User } from "../_models/user.model";


 private serviceUrl = "apiUrl";
  headers = new Headers({
    Authorization:
      "Bearer " + JSON.parse(localStorage.getItem("currentUser")).token,
    "Content-Type": "application/json"
  });
  options = new RequestOptions({ headers: this.headers });

constructor(private http: Http, private httpClient: HttpClient) {}

  getUser(): Observable<User[]> {
    return this.httpClient.get<User[]>(this.serviceUrl);
  }

问题是当我尝试发送选项来获取方法时:

getUser(): Observable<User[]> {
    return this.httpClient.get<User[]>(this.serviceUrl, this.options);
  }

返回:

消息:'RequestOptions' 类型的参数不可分配给 '{ headers?: HttpHeaders | 类型的参数{ [标题:字符串]: 字符串 |细绳[]; };观察?:“身体”;参数?:Ht...'。种类 属性“标题”不兼容。 类型 'Headers' 不可分配给类型 'HttpHeaders | { [标题:字符串]:字符串 |细绳[]; }'。 类型 'Headers' 不可分配给类型 '{ [header: string]: string |细绳[]; }'。 “标头”类型中缺少索引签名。

我尝试使用 http 而不是 httpClient 来更改它:

 return this.http.get<User[]>(this.serviceUrl, this.options);

但现在我明白了

message: '预期的类型参数为 0,但得到了 1。'

我做错了什么?

【问题讨论】:

    标签: angular


    【解决方案1】:

    您可以使用HttpClient 它来自@angular/common/http,如下所示:

    import { Injectable } from "@angular/core";
    import { Usuario } from "../_models/usuarios";
    import { HttpClient, HttpHeaders } from "@angular/common/http";
    import { Observable } from "rxjs";
    import { User } from "../_models/user.model";
    
    @Injectable()
    export class UserService{
    private serviceUrl = "apiUrl";
      headers = new HttpHeaders({
        Authorization: "Bearer " + JSON.parse(localStorage.getItem("currentUser")).token,
        "Content-Type": "application/json"
      });
    
    constructor(private httpClient: HttpClient) {}
    
      getUser(): Observable<User[]> {
        return this.httpClient.get<User[]>(this.serviceUrl, { 'headers': this.headers});
      }
    }
    

    【讨论】:

      【解决方案2】:

      如果你使用httpClient,你应该

      import { HttpHeaders } from '@angular/common/http';
      
      httpOptions = {
          headers: new HttpHeaders({
              'Content-Type':  'application/json',
              'Authorization': "Bearer " + JSON.parse(localStorage.getItem("currentUser")).token
          })
      }
      
      ...
      
      getUser(): Observable<User[]> {
          return this.httpClient.get<User[]>(this.serviceUrl,httpOptions);
      }
      

      【讨论】:

        猜你喜欢
        • 2021-05-25
        • 1970-01-01
        • 1970-01-01
        • 2020-07-21
        • 1970-01-01
        • 1970-01-01
        • 2017-10-12
        • 2020-12-07
        • 2019-08-04
        相关资源
        最近更新 更多