You need to enable JavaScript to run this app. NestJS集成Swagger时如何为SwaggerModule配置requestInterceptor
优惠活动
大模型
产品
解决方案
定价
更多

NestJS集成Swagger时如何为SwaggerModule配置requestInterceptor

NestJS 接入Swagger时配置requestInterceptor实现自定义请求头方案

找不到配置入口的本质原因

很多人翻遍NestJS Swagger的官方文档都找不到requestInterceptor的配置说明,不是这个配置不支持,而是官方文档只列了框架层面的常用自定义配置,没有把所有透传给swagger-ui的原生配置做全量罗列。
实际上SwaggerModule.setup方法的第四个入参(也就是你现在传的options2),会把内部嵌套的swaggerOptions字段下的所有配置,原封不动透传给前端运行的swagger-ui实例,requestInterceptor本身就是swagger-ui原生支持的配置字段,不需要额外装插件、改前端源码就能用。

可直接复用的实现代码

在你现有Swagger初始化逻辑的基础上,把requestInterceptor嵌套在swaggerOptions层级下即可,不需要改动其他现有逻辑:

import { DocumentBuilder, SwaggerModule, SwaggerCustomOptions } from '@nestjs/swagger';

// 原有文档构建逻辑完全保留
const config = new DocumentBuilder()
  .setTitle('项目接口文档')
  .setVersion('1.0')
  .build();
const document = SwaggerModule.createDocument(app, config);

// 改造你的options2配置
const options2: SwaggerCustomOptions = {
  // 你原有的顶层配置全部保留,比如自定义页面样式、路径前缀、持久化授权开关等
  swaggerOptions: {
    // 在这里配置requestInterceptor
    requestInterceptor: (req) => {
      // 为所有Try it out发起的请求注入自定义Origin头
      req.headers.Origin = '你需要设置的自定义Origin值';
      // 其他自定义请求修改逻辑都可以在这里写,比如统一加请求头、调整请求路径等
      return req;
    },
    // 其他swagger-ui原生配置可以和requestInterceptor同层级放
    persistAuthorization: true,
  },
};

SwaggerModule.setup('docs', app, document, options2);

实操踩坑提醒

  • 不要把requestInterceptor直接挂在SwaggerCustomOptions的顶层:顶层字段是NestJS专门用来做Swagger挂载流程的自定义配置,不会透传给前端的swagger-ui,挂错层级会完全不生效
  • 这个拦截器的触发时机覆盖所有Try it out功能的全流程:不管是实际向后端发的接口请求,还是页面自动生成的curl代码片段,都会经过这个拦截器的处理逻辑,完全匹配需要修改Origin头的需求
  • 拦截器拿到的请求对象,是已经完成认证头注入处理后的实例,不需要重复处理token、API Key这类授权逻辑,直接修改请求头即可
  • 配置完成后启动服务,打开/docs页面随便找个接口点Try it out,通过后端日志或者抓包工具检查请求头的Origin值,就能确认配置是否生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 19:15:03