代码之家  ›  专栏  ›  技术社区  ›  POV

在AngularHTTPInterceptor中如何处理HTTP状态?

  •  -2
  • POV  · 技术社区  · 6 年前

    我将添加选项用于Post请求:

     return this.http.post("", data, { observe: "response" });
    

    当我试图在拦截器中处理此响应时,我无法获取HTTP状态:

     return next.handle(request).pipe(
          map((event: any) => {
              console.log(event.status);
          return event;
    });
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Dmitriy Kavraiskyi    6 年前

    实际上,您不需要观察响应。您可以删除观察:“响应”。 在拦截器中处理它所需要的就是向管道添加catchError。逃避错误 (如果希望请求成功完成) 您应该返回catchError中的可观察内容。 您还可以通知用户或对某些错误执行一些操作,如上面显示的Klodian。

     return next.handle(request).pipe(
     catchError(error => {
       if (error instanceof HttpErrorResponse) {
       // notify user or perfome actions
       }
    
       return of([]);   // return empty Observable of array 
      }),
      map((event: any) => {
          console.log(event.status);
      return event;
    });
    
        2
  •  1
  •   Klodian    6 年前

    在管道内使用catchError,如下所示:

     .pipe(
           catchError(err => { // catch response error from server
                if (err instanceof HttpErrorResponse) {
                      switch ((<HttpErrorResponse>err).status) {
                         case 401: // if is 401 error
                      }
                 }
    
           })
      );