angular - Angular Interceptor - 订阅问题
问题描述
所以我有一个 HTTP 拦截器,用于将身份验证令牌传递给 apollo 服务器并从中捕获错误。
查询工作正常,但是当我尝试使用 apollo angular 包运行突变时,它会被执行(数据被添加到数据库中)但 subscribe 方法没有被执行。我会让你在我的拦截器下面,以及我如何称呼突变:
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
// return next.handle(req);
const tokenObservable = this.authService.getToken();
return tokenObservable.pipe(
switchMap(token => {
console.log(token);
// let nextHandle: Observable<HttpEvent<any>>;
let newRequest: HttpRequest<any>
if (token) {
newRequest = req.clone({
headers: req.headers.set('Authorization', token)
});
} else {
newRequest = req;
}
return next.handle(newRequest).pipe(
tap((event: HttpEvent<any>) => {
if (event instanceof HttpResponse) {
console.log('---event', event);
if (event.url === graphQlConfig.url && event.body && event.body.errors && event.body.errors[0].extensions.code === 'UNAUTHENTICATED') {
localStorage.removeItem('defaultTeam');
this.authService.signOut();
}
}
})
);
})
);
}
这是我称之为的突变:
this.addTeamGQL.mutate({
team_name: this.teamName
}).pipe(
tap(e => console.log(e))
).subscribe(res => {
console.log('res', res);
});
知道如何使它工作吗?如果在拦截器中我只是把return next.halde(req)
它工作。我认为问题出在这两个 observables 上,但我想不通。该getToken()
方法返回一个Obersable<string | null>
解决方案
推荐阅读
- visual-studio-code - 在第一次单击 rust 项目后,无法 ctrl+单击 vscode 中的符号
- discord.js - 在公会 discord.js V13 中获取类别的数量
- conda - Snakemake:GKE 上的 Conda env 下载/安装速度极慢
- haskell - 为什么这种类型定义是非法的?
- asp.net - 使用 Visual Studio 进行 ASP.NET Web 部署:部署到测试
- python - 与 python 请求保持相同的 cookie 和会话参数
- angular - 如何从抽象类访问组件的属性指令?
- javascript - 在 Javascript 中分配随机播放的概率
- amazon-web-services - 放弃 bucket-owner 读取权限,并授予其他用户
- flutter - Flutter 测试访问找到的小部件的状态