You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Angular HTTP拦截器拦截SSE请求?附失效拦截器代码

如何用HTTP拦截器拦截SSE请求?

你的拦截器无法拦截SSE请求的核心原因是:SSE采用分块传输机制,不会触发HttpResponse事件,它对应的是HttpEventType.ServerSentEvent类型的事件。你当前的代码只处理了HttpResponse,自然捕获不到SSE的推送内容。

修改后的拦截器代码如下:

import { Injectable } from '@angular/core';
import {
  HttpInterceptor,
  HttpRequest,
  HttpHandler,
  HttpEvent,
  HttpResponse,
  HttpEventType
} from '@angular/common/http';
import { Observable, tap } from 'rxjs';

@Injectable()
export class HttpDateParserInterceptor implements HttpInterceptor {
  intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {
    return next.handle(request).pipe(
      tap({
        next: (event: HttpEvent<any>) => {
          // 处理普通HTTP响应
          if (event instanceof HttpResponse) {
            // 保留你的原有逻辑
          }
          // 处理SSE推送事件
          if (event.type === HttpEventType.ServerSentEvent) {
            // 获取SSE推送的单条数据
            const sseData = event.data;
            // 在这里添加你的SSE处理逻辑,比如解析数据、更新页面状态等
            console.log('拦截到SSE数据:', sseData);
          }
        }
      })
    );
  }
}

关键说明:

  • 必须导入HttpEventType枚举,用来识别SSE对应的事件类型
  • 在tap操作符中新增对HttpEventType.ServerSentEvent的判断分支
  • 通过event.data可以直接获取到SSE推送的单条数据内容
  • 如果需要监控SSE的连接生命周期,还可以额外判断HttpEventType.Sent(请求已发送)、HttpEventType.DownloadProgress(数据传输中)等事件

内容的提问来源于stack exchange,提问作者Deepak Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 14:36:16