首页 > 解决方案 > 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>

标签: angularapollointerceptor

解决方案


推荐阅读