8

我刚刚开始使用Nestjs,我想知道如何使用路由前缀或通过 Express Router 实例对我的 API 进行版本控制?

理想情况下,我想通过以下方式访问端点:

/v1
/v2

等等,所以我可以优雅地降级端点。我没有看到可以在哪里添加版本前缀。我知道可以在应用程序实例上设置全局前缀,但这不适用于一组特定的端点。

4

4 回答 4

11

RouterModule 这是关于https://github.com/nestjs/nest/issues/255的公开讨论。我了解此功能的重要性,因此它应该会在不久的将来出现。此时就需要将v1/v2直接放入@Controller()装饰器中。

于 2017-12-18T07:44:09.460 回答
4

路由器模块来救援,有了 Nest RouterModule,它现在可以轻松组织您的路线。

请参阅如何轻松设置。

const routes: Routes = [
    {
      path: '/ninja',
      module: NinjaModule,
      children: [
        {
          path: '/cats',
          module: CatsModule,
        },
        {
          path: '/dogs',
          module: DogsModule,
        },
      ],
    },
  ];

@Module({
  imports: [
      RouterModule.forRoutes(routes), // setup the routes
      CatsModule,
      DogsModule,
      NinjaModule
      ], // as usual, nothing new
})
export class ApplicationModule {}

这将产生如下内容:

ninja
    ├── /
    ├── /katana
    ├── cats
    │   ├── /
    │   └── /ketty
    ├── dogs
        ├── /
        └── /puppy

当然,对于版本控制路线,您可以执行类似的操作

const routes: Routes = [
    {
      path: '/v1',
      children: [CatsModule, DogsModule],
    },
    {
      path: '/v2',
      children: [CatsModule2, DogsModule2],
    },
  ];

好的 !

看看Nest 路由器

于 2018-02-26T23:59:48.270 回答
2

对于版本或任何前缀,您可以使用“全局前缀”:

https://docs.nestjs.com/faq/global-prefix

于 2018-11-01T16:30:54.760 回答
1

最好和最简单的方法是使用全局前缀

下面给出一个例子:

import { VersioningType } from "@nestjs/common";
     
app.enableVersioning({
        type: VersioningType.URI,
      });

      app.setGlobalPrefix("api/v1"); //edit your prefix as per your requirements!

您可以使用以下构造从全局前缀中排除路由:

app.setGlobalPrefix('v1', {
  exclude: [{ path: 'health', method: RequestMethod.GET }], // replace your endpoints in the place of health!
});

或者,您可以将路由指定为字符串(它将应用于每个请求方法):

app.setGlobalPrefix('v1', { exclude: ['cats'] }); // replace your endpoints in the place of cats!
于 2021-10-12T07:17:04.567 回答