Nestjs-控制器中定义的路由相互覆盖
我有一个控制器Nestjs-控制器中定义的路由相互覆盖,nestjs,Nestjs,我有一个控制器 //imports etc ... @Get('me') async get(@Req res): Promise<UserVm> { // extract auth user from request object // return auth user } @Get(':id') // uuid async get(@Param('id') id: string): Promise<UserSummaryVm> { // r
//imports etc
...
@Get('me')
async get(@Req res): Promise<UserVm> {
// extract auth user from request object
// return auth user
}
@Get(':id') // uuid
async get(@Param('id') id: string): Promise<UserSummaryVm> {
// return a summary user profile
}
...
我如何解决这个问题?欢迎使用任何提示或指针。默认情况下,所有API端点均显示此标准:
GET ../user => [user1, user2, user3]
GET ../user/1 => user1
PUT ../user/1 => user1(that updated)
DELETE ../user/1 => user1(that deleted)
解决方案A
这意味着常规模式必须遵循此顺序,但对于像您这样的新情况或情况,可以使用其他方法,如:
GET ../user => [user1, user2, user3] all user
GET ../user/id/1 => user1
GET ../user/me => userX
解决方案B
改变方法在课堂上的位置可能会影响你的回答
@Get(':id')
async get(@Param('id') id: string): Promise<UserSummaryVm> {
if ( !Number.isInteger(id) ) next();
...
}
@Get('me')
async get(@Req res): Promise<UserVm> {
...
}
如果输入参数不是INTEGER,If语句将更改角色并转到下一个中间件 这一天结束时仍然是javascript,我们没有其他OOP语言所具有的“奇特”重载方法。只需以不同的方式命名方法(getById和get)
@Get(':id')
async get(@Param('id') id: string): Promise<UserSummaryVm> {
if ( !Number.isInteger(id) ) next();
...
}
@Get('me')
async get(@Req res): Promise<UserVm> {
...
}
if ( !Number.isInteger(id) ) next();