angular HTTP拦截器阻止请求继续进行并中断请求链

在Angular的HTTP拦截器中,如果你希望在特定条件下阻止请求继续进行并中断请求链,直接返回 false 实际上不会达到预期效果。Angular的HTTP拦截器期望拦截器方法 intercept 返回一个 Observable<HttpEvent<any>>。如果你想要中断请求,应该抛出一个错误或者返回一个错误的 Observable。

例如,如果你在拦截器中判断到请求不符合要求,可以通过抛出错误或返回一个带有错误信息的 Observable 来中断请求

复制代码
import { Injectable } from '@angular/core';
import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor, HttpErrorResponse } from '@angular/common/http';
import { Observable, throwError } from 'rxjs';
import { catchError } from 'rxjs/operators';

@Injectable()
export class MyInterceptor implements HttpInterceptor {

  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    // 假设我们有一些条件判断
    if (/* 不符合要求的条件 */) {
      // 抛出错误,中断请求
      return throwError(new HttpErrorResponse({ status: 403, statusText: 'Forbidden by Interceptor' }));
    }

    // 如果条件符合,继续处理请求
    return next.handle(request).pipe(
      catchError(error => {
        // 可以在这里处理错误,决定是否重新抛出或转换错误
        return throwError(error);
      })
    );
  }
}

在这个例子中,如果请求不符合你的要求,拦截器会抛出一个 HttpErrorResponse,模拟一个HTTP错误响应,从而中断请求流程。这会使得请求不会到达服务器,而且错误可以通过订阅的错误处理逻辑来捕获。

相关推荐
莫西干式秃头14 分钟前
用 AI + threejs 写了个浏览器里的 3D 动作游戏《武来》:砍怪、放技能、开 SU7
前端·人工智能·three.js
kyriewen28 分钟前
我测了 6 种防请求竞态的写法:只有 1 种真能打
前端·javascript·程序员
孟健30 分钟前
用 WorkBuddy 做个人名片网页,挂上开源设计技能后效果完全不同了
前端·人工智能·ai编程
IT_陈寒34 分钟前
SpringBoot自动配置的坑,这次终于爬出来了
前端·人工智能·后端
LuHang2 小时前
从天地图切换到高德地图:一次真实的底图迁移实战
前端·vue.js·cesium
用户360055579002 小时前
Kestrel_VLLM - 27 · 寄存器常驻与融合发射:两次「少发一次」
前端
前端小万2 小时前
用"道法术器"重构你和 AI 的协作方式
前端·人工智能·程序员
鶴哥只手遮天2 小时前
Angular 22 源码级深度解析-第 06 章 模板指令全解:`ɵɵelementStart`、`ɵɵproperty`、`ɵɵadvance` 与绑定指令
前端·开源·angular.js
像我这样帅的人丶你还2 小时前
我html生成的doc文档为何在手机文档显示不了图片?
前端·javascript
前端双越老师3 小时前
程序员 1v1 访谈系列第十期:纯前端坚持不了多久了
前端·ai编程·全栈