angular - 特定服务中的标头问题
问题描述
在我的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 变量在尝试访问组件之前在登录功能中设置。
解决方案
问题解决了。我正在使用 Navbar 发送的 httpOptions。但是在登录之前导航栏已经初始化并且我的标题是未定义的。在此服务中,我创建了一个函数来初始化我的 httpOptions,并且每次使用此方法时,我都会获得身份验证令牌。
推荐阅读
- json - xml.Marshal 创建了太多标签
- http - RxJava调度程序间隔http轮询等待请求完成后再轮询?
- excel - 1004 无法获取 Worksheet 函数类的 Workday_Intl 属性
- javascript - 等待事件触发,直到继续代码
- javascript - 管道 Observables 并返回一个 Promise
- r - 从循环中更新渲染文本的问题
- python - 如何在波斯语的按钮、文本输入中显示文本?
- install4j - 安装操作在文件提取期间将源树复制到安装位置
- jquery - JQuery 根据点击显示带有 id 的图像(取 2)
- node.js - 即使在初始握手之后,Socket IO 连接是否仍在发送标头?