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
相关产品推荐
相关产品推荐

