首页 > 解决方案 > 特定服务中的标头问题

问题描述

在我的onInit()函数中的组件中,我调用了列出一些数据。使用以下代码对名为“Permission.service”的服务进行此调用。

  ngOnInit() {
    this.listPermissions();
  }

  listPermissions(): void {
    this.permissionService.getPermissions().subscribe(
      res=>{
        this.permissionList=res;
      }
    )
  }

但是它给了我以下错误日志:

core.js:1673 错误类型错误:无法读取 http.js:108 处 Array.forEach () 处 HttpHeaders.lazyInit (http.js:102) 处 HttpHeaders.push ../node_modules/@angular 的属性“长度” /common/fesm5/http.js.HttpHeaders.init (http.js:166) 在 HttpHeaders.push../node_modules/@angular/common/fesm5/http.js.HttpHeaders.forEach (http.js:235) 在Observable._subscribe (http.js:1445) 在 Observable.push../node_modules/rxjs/_esm5/internal/Observable.js.Observable._trySubscribe (Observable.js:43) 在 Observable.push../node_modules/rxjs/ _esm5/internal/Observable.js.Observable.subscribe (Observable.js:29) at subscribeTo.js:21 at subscribeToResult (subscribeToResult.js:11)

使用 chrome 调试器,“x-access-token”标头会带来一个未定义的值。但是,除了服务名称之外,使用完全相同的代码调用不同的服务,它工作得很好。

export class PermissionsService {
  constructor(private http: HttpClient, private loginService: LoginService, private globalService: GlobalsService) {}
  httpOptions = {
    headers: new HttpHeaders({
      "Content-Type": "application/json",
      "x-access-token": this.loginService.userInfo
    })
  };

  getPermissions(): Observable<any[]> {
    return this.http.get<any[]>(
      this.globalService.API_PATH + "readAllPermissions",
      this.httpOptions
    );
  }
...

以下是不起作用的服务:

export class RolePermissionService {

  constructor(private http: HttpClient, private loginService: LoginService, private globalService: GlobalsService) { }
  httpOptions = {
    headers: new HttpHeaders({
      "Content-Type": "application/json",
      "x-access-token": this.loginService.userInfo
    })
  };

  getPermissions(): Observable<any[]> {
    return this.http.get<any[]>(
      this.globalService.API_PATH + "readAllPermissions",
      this.httpOptions
    );
  }

userInfo 变量在尝试访问组件之前在登录功能中设置。

标签: angular

解决方案


问题解决了。我正在使用 Navbar 发送的 httpOptions。但是在登录之前导航栏已经初始化并且我的标题是未定义的。在此服务中,我创建了一个函数来初始化我的 httpOptions,并且每次使用此方法时,我都会获得身份验证令牌。


推荐阅读