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();