3 回答
TA贡献1821条经验 获得超6个赞
2021 年更新
NestJS 现在原生支持原始答案。
此外,当主要功能是对 API 进行版本控制时, NestJS v8还添加了更复杂的路由:
@Controller({
path: 'cats',
version: '1', // 👈
})
export class CatsController {
...
原答案
在 NestJS 中实现这一点的最可靠的方法是使用Nest-router包来创建路由树。
yarn add nest-router
# or npm i nest-router
main.ts在名为的旁边创建一个文件,routes.ts如下所示:
import { Routes } from 'nest-router';
import { YourModule } from './your/your.module';
export const routes: Routes = [
{
path: '/v1',
module: YourModule,
},
];
然后,在文件中,在加载任何其他模块之前app.module.ts添加路由器:
@Module({
imports: [
RouterModule.forRoutes(routes),
YourModule,
DebugModule
],
})
现在,当您导航到控制器时,在本例中YourModule,其所有路由都将以 例如 为前缀:v1
curl http://localhost:3000/v1/your/operation
使用这种方法可以为您提供最大的灵活性,因为每个模块不需要知道它的前缀如何;应用程序可以在更高级别上做出决定。与依赖静态字符串相比,几乎更高级的前缀可以动态计算。
TA贡献1898条经验 获得超8个赞
对我来说,仅仅为了实现这一点而添加第三方包有点不必要,更不用说它过时/不维护的风险了。您可以在类中添加自定义路由前缀Controller。
@Controller('custom/prefix')
export const MyController {
@Get('health')
getHealth() {
//this route would be: custom/prefix/health
return {};
}
@Get('other')
getOther() {
//this route would be: custom/prefix/other
return {};
}
}
然后只需将此控制器添加到您的Module
TA贡献1900条经验 获得超5个赞
您现在可以使用 RouterModule 配置,也可以从全局前缀配置中排除某些路径(或混合使用两者):
路由器模块: https://docs.nestjs.com/recipes/router-module#router-module
全局前缀“排除”: https ://docs.nestjs.com/faq/global-prefix#global-prefix
添加回答
举报