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

NestJS中setGlobalPrefix的exclude配置不生效问题求助

解决NestJS全局前缀排除uploads失效的问题

方案1:控制器级别排除全局前缀(推荐)

直接在FileController的@Controller装饰器中添加excludeGlobalPrefix: true配置,让整个控制器的路由跳过全局前缀:

@Controller({ path: 'uploads', excludeGlobalPrefix: true })
export class FileController {
  @Get(':filename')
  @Header('Content-Type', 'image')
  async getFile(@Param('filename') filename: string): Promise<StreamableFile> {
    // 你的逻辑代码
  }
}

方案2:修改全局前缀的排除规则

如果不想修改控制器代码,需要调整全局前缀的exclude选项,匹配所有uploads开头的路由路径(使用通配符*):

app.setGlobalPrefix('api', { exclude: ['uploads*'] });

或者更精确地指定要排除的路由(适合精细化控制场景):

import { RequestMethod } from '@nestjs/common';

app.setGlobalPrefix('api', {
  exclude: [
    { path: 'uploads', method: RequestMethod.ALL },
    { path: 'uploads/:filename', method: RequestMethod.GET },
  ],
});

问题原因

你之前设置的exclude: ['uploads']只会匹配精确路径/uploads(即控制器中不带参数的@Get()路由),而实际请求路径是/uploads/:filename,不在排除范围内,所以NestJS依然会给该路径加上全局前缀api,导致必须访问/api/uploads/:filename才能生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 08:40:08