沈斌
2018-03-13 9c9b8250b973eea72f6970e1ceb46facca9f0a99
src/app/core/net/default.interceptor.ts
@@ -10,6 +10,7 @@
import { NzMessageService } from 'ng-zorro-antd';
import { _HttpClient } from '@delon/theme';
import { environment } from '@env/environment';
import { LoginService } from '@business/services/http/login.service';
/**
 * 默认HTTP拦截器,其注册细节见 `app.module.ts`
@@ -28,7 +29,7 @@
    private handleData(event: HttpResponse<any> | HttpErrorResponse): Observable<any> {
        // 可能会因为 `throw` 导出无法执行 `_HttpClient` 的 `end()` 操作
        this.injector.get(_HttpClient).end();
        // this.injector.get(_HttpClient).end();
        // 业务处理:一些通用操作
        switch (event.status) {
            case 200:
@@ -52,12 +53,20 @@
                this.goTo(`/${event.status}`);
                break;
        }
        return of(event);
        // 这里不抛出错误 httpclient 无法捕捉
        if (event instanceof HttpErrorResponse) {
            return ErrorObservable.create(event);
        } else {
            return of(event);
        }
    }
    intercept(req: HttpRequest<any>, next: HttpHandler):
        Observable<HttpSentEvent | HttpHeaderResponse | HttpProgressEvent | HttpResponse<any> | HttpUserEvent<any>> {
        if (!req.headers.get('X-Refrsh-Token')) {
            const loginService = <LoginService>this.injector.get(LoginService);
            loginService.refreshToken();
        }
        // 统一加上服务端前缀
        let url = req.url;
        if (!url.startsWith('https://') && !url.startsWith('http://')) {
@@ -68,7 +77,7 @@
            url: url
        });
        return next.handle(newReq).pipe(
                    mergeMap((event: any) => {
                    mergeMap((event: any) => {
                        // 允许统一对请求错误处理,这是因为一个请求若是业务上错误的情况下其HTTP请求的状态是200的情况下需要
                        if (event instanceof HttpResponse && event.status === 200)
                            return this.handleData(event);