因此,我有一个HTTP拦截器,可用于将auth令牌传递给阿波罗服务器,并从中捕获错误。
查询工作正常,但是当我尝试使用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)
,它就可以工作。我认为问题在于这两个可观察物,但我无法弄清楚。 getToken()
方法返回一个Obersable<string | null>