我需要构建一个API,其中大多数路由都以一个公共URL部分作为前缀,该部分也有一个参数。
在我的具体情况中,我的路线需要看起来像:
/accounts/:account/resource1/:someParam
/accounts/:account/resource2/:someParam/whatever
/accounts/:account/resource3/
/accounts/:account/resource4/subResource/
依旧......
理想情况下,我会创建父路线/accounts/:account/
,其中包含儿童路线(resource1
,resource2
,{ {1}},resource3
等等......)。
我还需要可以从所有子路径访问resource4
参数。
使用NestJS实现这一目标的最佳方法是什么?
答案 0 :(得分:3)
我认为你需要这个吗?
import {Controller, Get, Param} from "@nestjs/common";
@Controller('accounts/:account')
export class TestController{
@Get('resource2/:someParam/whatever')
arsPW(@Param('account') account, @Param('someParam') someparam){
console.log(':account/resource2/:someParam/whatever',account,someparam)
return account+'_'+someparam+'___';
}
@Get('resource1/:someparam')
aRSP(@Param('account') account, @Param('someparam') someparam){
console.log(':account/resource1/:someParam',account,someparam)
return account+'_'+someparam;
}
@Get()
getget(){
console.log('get');
return 'aaa';
}
}
答案 1 :(得分:1)
关于您的用例,您可能需要查看此路由器模块
=> https://github.com/shekohex/nest-router
根据此模块的文档,您可以像这样定义路线:
... //imports
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 {}
当然,路线将在单独的文件中定义,例如routes.ts
鉴于你有一个模块控制器,前面的代码将在以下路径树中结束:
ninja
├── /
├── /katana
├── cats
│ ├── /
│ └── /ketty
├── dogs
├── /
└── /puppy
的 实施例 强>:
如果您想要访问 ketty
控制器的路线,则需要到达此端点:
的 <your-api-host>/ninja/cats/ketty
强>
答案 2 :(得分:1)
父控制器:
@Controller('accounts')
export class AccountsController {
// http://api.domaine.com/accounts
@Get()
子控制器:
@Controller('accounts/:id')
export class ResourcesController {
// http://api.domaine.com/accounts/1/resources
@Get('resources')