最近项目在使用angular6开发,封装了一个HttpInterceptor的拦截器,但是一直是报错的。。
auth.service.ts 里面的代码
import {Injectable} from '@angular/core';
import {HttpService} from './services/http.service';
@Injectable()
export class AuthService {
public timestamp: any = '';
constructor(private http: HttpService) {
}
/*
* 动态获取时间戳做验证
* */
getTimestamp() {
this.http.getData('/common/timestamp').subscribe((respData: any) => {
if (respData.code === '0000') {
this.timestamp = respData.data;
}
}
);
}
//test用的
getAuthorizationToken() {
return 'some-auth-token';
}
}
interceptor.service.ts
import {Injectable} from '@angular/core';
import {HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse} from '@angular/common/http';
import {Observable} from 'rxjs';
import {tap} from 'rxjs/operators';
import {constant} from '../../providers';
import {AuthService} from '../auth.service';
@Injectable()
export class InterceptorService implements HttpInterceptor {
constructor(private authService: AuthService) {
}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
// const authToken = this.authService.getTimestamp(); //这个代码放开的话,就陷入死循环
const authToken = this.authService.getAuthorizationToken();
const clonedRequest = req.clone({
setHeaders: {
leo: 'test',
version: constant.VERSIONS,
},
});
console.log(clonedRequest.method);
return next.handle(clonedRequest).pipe(
tap(
event => {
if (event instanceof HttpResponse) {
console.log(event);
}
},
error => {
console.error(error.message);
}
)
);
}
}
如果我把interceptor.service.ts里面的const authToken = this.authService.getTimestamp();放开,就会陷入循环。
我想在拦截器的header请求头里面加个时间戳做验证,这个时间戳必须是post请求的时候从后台重新获取,现在是不知道怎么解决了?有谁知道吗?谢谢
拦截器判断url /common/timestamp 直接放行