Angular 无法在角度服务方法调用上读取null的属性“length”?

Angular 无法在角度服务方法调用上读取null的属性“length”?,angular,typescript,rxjs,angular-http-interceptors,Angular,Typescript,Rxjs,Angular Http Interceptors,我正在修改一个现有的Angular项目,而不是我的项目,为我的外部API添加一个新的调用 这是服务方法: getUserName:可观察{ 返回this.http.getenvironment.apiUrl+url.USER\u名称 } 我在appcomponent.ts上使用它,如下所示: this.userService.getUserName.subscribename=>{ this.user=name } 执行时,我得到以下错误: core.js:1673错误类型错误:无法读取null

我正在修改一个现有的Angular项目,而不是我的项目,为我的外部API添加一个新的调用

这是服务方法:

getUserName:可观察{ 返回this.http.getenvironment.apiUrl+url.USER\u名称 } 我在appcomponent.ts上使用它,如下所示:

this.userService.getUserName.subscribename=>{ this.user=name } 执行时,我得到以下错误:

core.js:1673错误类型错误:无法读取null的属性“length” 在HttpHeaders.push../node_modules/@angular/common/fesm5/http.js.HttpHeaders.applyUpdate http.js:199 http.js:170 at Array.forEach 在HttpHeaders.push../node_modules/@angular/common/fesm5/http.js.HttpHeaders.init http.js:170 在HttpHeaders.push../node_modules/@angular/common/fesm5/http.js.HttpHeaders.forEach http.js:235 在可观察状态下订阅http.js:1435 在Observable.push../node_modules/rxjs/_esm5/internal/Observable.js.Observable.\u尝试订阅 可见。js:43 在Observable.push../node_modules/rxjs/_esm5/internal/Observable.js.Observable.subscribe 可观察。js:29 在MapOperator.push../node_modules/rxjs/_esm5/internal/operators/map.js.MapOperator.call 地图.js:18 在Observable.push../node_modules/rxjs/_esm5/internal/Observable.js.Observable.subscribe 可观察。js:24

这似乎是一个标题问题或一些订阅/可观察的错误,但我找不到错误所在

我的代码有问题吗? 它可能是正在修改请求的现有拦截器? 请注意,异常是在发出请求之前引发的,因此创建该请求时一定是客户机问题

编辑:

这是我发现的唯一拦截器:

@Injectable({
  providedIn: 'root'
})
export class TenantHttpInterceptor implements HttpInterceptor {

  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    if (req.url.indexOf(environment.apiTFSmin) === -1) {
      let tenantReq = req.clone({ headers: req.headers.set('current', sessionStorage.getItem('current')) })
      if (sessionStorage.getItem('tenant') != null && sessionStorage.getItem('newTenant') == null) {
        tenantReq = tenantReq.clone({ headers: tenantReq.headers.append('Tenant', sessionStorage.getItem('tenant')) })
      } else if (sessionStorage.getItem('newTenant') != null) {
        tenantReq = tenantReq.clone({ headers: tenantReq.headers.append('Tenant', sessionStorage.getItem('newTenant')) })
        sessionStorage.removeItem('newTenant')
      }
      if (req.method === 'POST' || req.method === 'PUT') {
        tenantReq = tenantReq.clone({ headers: tenantReq.headers.append('Content-Type', 'application/json') })
      }
      return next.handle(tenantReq)
    } else {
      const tenantReq = req.clone({ headers: req.headers.set('Authorization', 'Bearer ' + btoa('pescanilla-ext:m12345678*')) })
      // const tenantReq = req.clone()
      return next.handle(tenantReq)
    }
  }
}

您没有检查“当前”标头是否实际存在于存储器中

let tenantReq = req.clone({ headers: req.headers.set('current', sessionStorage.getItem('current')) })

编辑:一旦您尝试发送标头为空值的请求,HttpClient将抛出错误。尝试用静态值替换sessionStorage.getItem'current'并对其进行测试。

是否有http侦听器?编辑问题@argon检查服务文件中httpClient的导入。从'@angular/common/http'导入{HttpClient,HttpHeaders};既然这不是一个案例,我想你说的“设置”是什么意思?他不会在以后重写标题,我认为它会失败是有道理的,因为其中一个标题可以为空。你能在解释时更新你的答案,让他试试吗