【问题标题】:How to make super arguments optional in angular?如何在角度中使超级参数可选?
【发布时间】:2021-04-16 02:28:03
【问题描述】:

您好,我遇到了一个简单的问题。

我的代码的目标是处理 401 http 响应并导航回登录屏幕。

以下是我的基类

@Injectable({
  providedIn: 'root',
})
export class BaseService {
  constructor(public router: Router, public snakeBar: MatSnackBar) {}

  handleError(errorResponse: HttpErrorResponse) {
    if (errorResponse instanceof HttpErrorResponse) {
      if (errorResponse.status == 401) {
    this.router.navigate(['auth/login']);
    this.snakeBar.open('Session expired, Please login again', 'OK', {
      duration: 3000,
    });
      }
    }
    }
    }

以下是对基础服务进行扩展的服务之一。

@Injectable({
  providedIn: 'root',
})
export class SettingsService extends BaseService {
  constructor(
    private https: HttpClient
  ) {
    super();
  }

  getSomeData(): Observable<any> {
    const { ctoken } = localStorage;
    const httpOptions = {
      headers: new HttpHeaders({
        Authorization: `bearer ${ctoken}`,
      }),
    };

    return this.https
      .get(
        `someUrl`,
        httpOptions
      )
      .pipe(catchError(this.handleError));
  }
  }

根据代码标准,我必须向我的父母发送两个参数,路由器和小吃店。

第一个问题 = 我在 10+ 服务中扩展了基础服务,很难从所有扩展类发送。 第二期 = 即使在发送超级(路由器,matSnackBar)之后。我收到错误路由器,并且在基本服务中未定义小吃吧。

谁能解释一下如何解决这个问题。

我使用角度 10

【问题讨论】:

  • 要处理 http 响应,您可以使用处理所有 http 调用的 http 拦截器。

标签: javascript angular typescript http


【解决方案1】:

处理后端 401 Unauthorized

我们应用程序的每个页面都会对后端进行多次 XHR 调用。在某些时候,由于各种原因,用户的会话可能会过期。我们没有向用户显示一堆错误消息 - 在出现问题的第一个迹象 (401) 时,我们将用户重定向到登录页面。

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
  request = request.clone({
    setHeaders: {
      'my-auth-token': `${this.getSessionToken()}`
    }
  });
  return next.handle(request).pipe(
    catchError((response: HttpErrorResponse) => {
      if (response.status === 401) {
        // Do something here
      }
      return throwError(response);
    }
  );
}

更多信息请查看this postthis answer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 2018-04-08
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    相关资源
    最近更新 更多