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错误响应,从而中断请求流程。这会使得请求不会到达服务器,而且错误可以通过订阅的错误处理逻辑来捕获。

相关推荐
ogre20201 分钟前
http header Authorization: Bearer和token之间可以有几个空格
http
HIT_Weston6 分钟前
57、【Ubuntu】【Gitlab】拉出内网 Web 服务:Gitlab 配置审视(一)
前端·ubuntu·gitlab
用户6600676685397 分钟前
模板字符串 + map:用现代 JavaScript 高效构建动态 HTML
前端·javascript
AY呀8 分钟前
《玩转Vue3响应式:手把手实现TodoList,掌握核心指令》
前端·javascript·vue.js
哆啦A梦158818 分钟前
商城后台管理系统 07 商品列表-分页实现
前端·javascript·vue.js
爱因斯坦乐19 分钟前
【若依】前后端分离添加导入
java·前端·javascript
Cache技术分享19 分钟前
267. Java 集合 - Java 开发必看:ArrayList 与 LinkedList 的全方位对比及选择建议
前端·后端
答案answer22 分钟前
Vue3项目集成monaco-editor实现浏览器IDE代码编辑功能
前端·vue.js
爱上妖精的尾巴27 分钟前
6-1WPS JS宏 new Set集合的创建
前端·后端·restful·wps·js宏·jsa
绝世唐门三哥28 分钟前
Vue 自定义指令完全指南(含 Vue2/Vue3 对比 + 完整 Demo)
前端·javascript·vue.js