【问题标题】:Angular 5 HTTP.get returns cannot read length of undefinedAngular 5 HTTP.get 返回无法读取未定义的长度
【发布时间】:2022-04-13 01:32:59
【问题描述】:

正在从我的服务发出此调用以检索 URL 以下载文档:

return this.http.get(this.buildUrl('issueDocument', 'get', pathParams), { responseType: 'blob', params: queryParams });

this.http.get 中的 buildURL 工作正常我已经测试过了,但是 this.http.get 的返回抛出了这个错误

ERROR TypeError: Cannot read property 'length' of undefined
at HttpHeaders.applyUpdate (http.js:322)
    at eval (http.js:269)
    at Array.forEach (<anonymous>)
    at HttpHeaders.init (http.js:269)
    at HttpHeaders.forEach (http.js:368)
    at Observable.eval [as _subscribe] (http.js:2172)
    at Observable._trySubscribe (Observable.js:172)
    at Observable.subscribe (Observable.js:160)
    at CatchOperator.call (catchError.js:80)
    at Observable.subscribe (Observable.js:157)

对正在发生的事情有任何想法吗?我不明白为什么会发生这种情况...在开发工具网络选项卡中,它甚至没有显示网络调用...

【问题讨论】:

  • 似乎是一个错误的标题。您的应用是否使用 HTTP 拦截器或类似的东西?
  • 标题不好是什么意思?
  • 根据错误消息,其值为undefined 的标头。
  • 不,我确实有拦截器服务,但我也多次打破这条线。没有未定义的值。
  • 如果可以的话,发布那个拦截器的代码。我不认为错误来自您发布的那一行。

标签: angular rxjs httpresponse ngrx


【解决方案1】:

从错误消息看来,您只需要不让undefined 传递到您的标头.set(...)

我这样做:

 getHeaders() {
    const headers = new HttpHeaders();
    headers
      .set('Content-Type', 'application/json')
      .set('Authorization', localStorage.getItem('token') || '');
    return headers;
  }

【讨论】:

  • 这可以工作,但它必须收到响应。事实证明,我提供的 API 响应正确,但该特定响应缺少正确的权限...
【解决方案2】:

要解决这个问题,请在设置到标题之前检查变量

if (!headers.has("Content-Type"))
    { headers = headers.clone( { headers: headers.set("Content-Type",  "application/json") }); }

【讨论】:

    猜你喜欢
    • 2016-09-25
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    相关资源
    最近更新 更多