搭建通用类
由于之前用的是Abp框架,框架封装的十分成熟,所以很多时候用起来都是知其然而不知其所以然。比如刚开始还没有意识到每次请求都传了token,因为在http方法的调用中,并没有看到它添加header,知道后面看network才知道每次都传了token,搜了全部的文件,关于token的,只有封装好的settoken方法和gettoken方法,到底是怎么加入header的十分费解,后来,想了想估计是拦截器的作用,找了找abp源码,果然有httpInceptor.js,代码一读,问题自然迎刃而解。
HttpInterceptor(HTTP拦截器)
关于这个东西的概念,官网是有十分清楚的解释的,通俗的来说就是你在每次发起http请求时,最后的都要经过拦截器来加工一次,然后返回的http response也是要先经过拦截器处理加工。
自定义拦截器需要创建一个服务,服务中必须有的方法是intercept方法。
@Injectable()
export class InterceptorService implements HttpInterceptor {
constructor(
private message: NzMessageService,
private sessionService: SessionService) {
}
id: string = "";
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if (this.id == "" && !req.url.includes('json')) {
this.id = this.message.loading('请稍后...', { nzDuration: 0 }).messageId;
}
let secureReq: HttpRequest<any> = req;
// const url = `${config.apiUrl}/api/`; //添加api统一前缀
let modifiedHeaders = new HttpHeaders();
let token = document.cookie;
if (token) {
modifiedHeaders = req.headers.set('Authorization', `Bearer ${token}`);
}
secureReq = req.clone({
url: req.url,
headers: modifiedHe