【问题标题】:Angular 6 HttpErrorResponse on POST with 200 statusPOST 上的 Angular 6 HttpErrorResponse,状态为 200
【发布时间】:2019-05-05 10:44:25
【问题描述】:

使用我的 Angular 6 客户端,我访问 http://localhost:8082/login 以发送 usernamepassword 并返回一个令牌。 这是错误 请注意,error: 下有我想要的令牌。

这就是 Postman 上的样子

这是我在 Angular 上使用给定用户名和密码获取令牌的函数

validateUser(user:User){


    var reqHeader = new HttpHeaders({ 'Content-Type': 'application/json','No-Auth':'True' });



    return this.httpClient.post<User>(this.apiURL + '/login',user,{headers:reqHeader});
  }

我只想返回令牌,就像在 Postman 中一样。我尝试了toPromise(),但出现了更多错误。

【问题讨论】:

  • 请检查内容类型是否有效
  • Content-type 也是 Angular 的 application/json
  • 您正在尝试解析不是 JSON 的响应,从而出现错误。在 JSON 字符串中发送令牌或更改标头以解决问题。

标签: angular api post


【解决方案1】:

默认情况下,Angular HttpClient 会尝试将 HTTP 响应的主体解析为 JSON。 由于您收到的响应正文是纯文本,例如“Bearer .....”,而不是 JSON,JSON 解析失败。

您需要告诉 HttpClient 期待纯文本响应,如下所示:

this.httpClient.post(this.apiURL + '/login', user, {headers:reqHeader, responseType: 'text'});

还请注意,由于响应是一个字符串,因此您不应尝试将其强制转换为用户(不要使用&lt;User&gt; 位);传出消息为用户,返回值为字符串。

【讨论】:

  • 就是这样!谢谢楼主!
  • 谢谢。发生在我身上。缺乏关注。
【解决方案2】:

在 Angular 11+ 中使用 httpOptions = { responseType:'文本'作为常量, }

【讨论】:

    【解决方案3】:

    我有同样的错误

    您必须将响应从 json 更改为 text

    数据类型默认为 JSON

    这种方式在observable中产生新的错误以及这种情况的解决方案

    this.httpClient.post(this.apiURL + '/login', user, {headers:reqHeader, responseType: 'text'});
    

    我认为以上述方式会产生新的错误,因为在这种情况下可以观察到解决方案

    src/app/myS.service.ts(24,54) 中的错误:错误 TS2322:类型 '"text"' 不可分配给类型 '"json"'

    你必须使用这个模式来解决它

        returnObservable(): Observable<any> {
      const requestOptions: Object = {
        /* other options here */
        headers:reqHeader
        responseType: 'text'
      }
      return this.http.get<any>(url, body, requestOptions);
    }
    

    【讨论】:

      猜你喜欢
      • 2019-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-25
      • 2018-10-23
      • 2019-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多