角拦截器-订阅问题

时间:2019-12-06 17:13:56

标签: angular apollo interceptor

因此,我有一个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>

0 个答案:

没有答案