Angular 4如果集中会话到期处理

时间:2017-11-30 15:10:48

标签: angular angular2-services

我正在使用角度4.x

在开发环境中,如果有人重新启动服务器,或者如果用户从另一个选项卡注销,然后用户继续尝试从另一个选项卡执行某些操作,他/她就会在页面上看到错误。

我想使用Angular的HTTP服务集中解决方案,这样如果用户尝试执行任何操作并且由于会话过期而发生错误,我们就想刷新页面。

1 个答案:

答案 0 :(得分:1)

所以这是我从here获得的HttpInterceptor类的示例(完整的plunker here)。

@Injectable()
export class MyHttpLogInterceptor implements HttpInterceptor {
  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    console.log('processing request', request);

    const customReq = request.clone({
      headers: request.headers.set('app-language', 'it')
    });

    return next
      .handle(customReq)
      .do((ev: HttpEvent<any>) => {
        if (ev instanceof HttpResponse) {
          console.log('processing response', ev);
        }
      })
      .catch(response => {
        if (response instanceof HttpErrorResponse) {
          console.log('Processing http error', response);
        }

        return Observable.throw(response);
      });
  }
}

catch块可能是您感兴趣的内容。您可以检查错误并检查它是否来自会话过期,然后对其做出正确反应。

您需要在app.module中提供此拦截器。

providers: [
    { provide: HTTP_INTERCEPTORS, useClass: MyHttpLogInterceptor, multi: true }  
  ]