nestjs 中的多个全局前缀

Posted

技术标签:

【中文标题】nestjs 中的多个全局前缀【英文标题】:More than one global prefix in nestjs 【发布时间】:2021-02-10 19:51:38 【问题描述】:
import  NestFactory  from '@nestjs/core';
import  AppModule  from './app.module';

async function bootstrap() 
  const app = await NestFactory.create(AppModule);

  app.setGlobalPrefix("v1");
  app.setGlobalPrefix("v2");

  await app.listen(3000);


bootstrap();

我想要两个版本的 API,所以想知道如何设置两个全局前缀?

【问题讨论】:

【参考方案1】:

您可以通过使用NestFactoryStatic 初始化一个工厂来创建单独的工厂,通过调用setGlobalPrefix 为该工厂设置一个全局前缀并通过调用init 方法对其进行初始化。

这是一个关于如何执行此操作的示例,源自 source:

async function bootstrap() 
    const server = express();
    const config = require('../../etc/config.js');

    const apiFactory = new NestFactoryStatic();
    const api = await apiFactory.create(ApiModule, server);
    api.setGlobalPrefix("/api/v1");
    await api.init();

    const adminFactory = new NestFactoryStatic();
    const admin = await adminFactory.create(AdminModule, server);
    admin.setGlobalPrefix("/admin");
    await admin.init();

    http.createServer(server).listen(config.server.port);


bootstrap();

【讨论】:

【参考方案2】:

据我所知,您无法使用 setGlobalPrefix 执行此操作,也没有对提到的 in the docs 的支持。但是您可以为每个版本创建两个控制器并在那里设置基本路径:

@Controller('/v1')
export class ApiControllerV1 
  @Get()
  findAll(): string 
    return 'This action returns all cats';
  


@Controller('/v2')
export class ApiControllerV2 
  @Get()
  findAll(): string 
    return 'This action returns all cats';
  

【讨论】:

@Gaurav:有什么反馈吗?

以上是关于nestjs 中的多个全局前缀的主要内容,如果未能解决你的问题,请参考以下文章

如何在 NestJS 中跨模块全局注入价值?

NestJS - 每个模块使用多个 MongoDB 连接

使用 Nestjs 监听多个 RabbitMQ 队列

测试中的 NestJS 全局模块

Nestjs中多个graphql解析器实现的问题

NestJS“获得”多个参数