我刚刚开始使用Nestjs,我想知道如何使用路由前缀或通过 Express Router 实例对我的 API 进行版本控制?
理想情况下,我想通过以下方式访问端点:
/v1
/v2
等等,所以我可以优雅地降级端点。我没有看到可以在哪里添加版本前缀。我知道可以在应用程序实例上设置全局前缀,但这不适用于一组特定的端点。
RouterModule
这是关于https://github.com/nestjs/nest/issues/255的公开讨论。我了解此功能的重要性,因此它应该会在不久的将来出现。此时就需要将v1
/v2
直接放入@Controller()
装饰器中。
路由器模块来救援,有了 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 路由器
对于版本或任何前缀,您可以使用“全局前缀”:
最好和最简单的方法是使用全局前缀
下面给出一个例子:
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!