我有一个控制器
//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
}
...
Run Code Online (Sandbox Code Playgroud)
然而,/:id是压倒性的/me。我尝试重新排序路线但无济于事。我总是收到以下错误:
[Nest] 94764 - 8/23/2018, 7:45:50 PM [ExceptionsHandler] Could not find
any entity of type "User" matching: "me"
EntityNotFound: Could not find any entity of type "User" matching: "me"
at new EntityNotFoundError
([PROJECT_ROOT]\src\error\EntityNotFoundError.ts:11:9)
at [PROJECT_ROOT]\src\entity-manager\EntityManager.ts:622:39
at process._tickCallback (internal/process/next_tick.js:68:7)
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?任何提示或指示表示赞赏。
默认情况下,所有 API 端点均显示此标准:
GET ../user => [user1, user2, user3]
GET ../user/1 => user1
PUT ../user/1 => user1(that updated)
DELETE ../user/1 => user1(that deleted)
Run Code Online (Sandbox Code Playgroud)
这意味着常规模式必须遵循此顺序,但对于新情况或像您这样的情况,可以使用其他方法,例如:
GET ../user => [user1, user2, user3] all user
GET ../user/id/1 => user1
GET ../user/me => userX
Run Code Online (Sandbox Code Playgroud)
更改方法在类中的位置可能会影响您的响应。
@Get(':id')
async get(@Param('id') id: string): Promise<UserSummaryVm> {
if ( !Number.isInteger(id) ) next();
...
}
@Get('me')
async get(@Req res): Promise<UserVm> {
...
}
Run Code Online (Sandbox Code Playgroud)
在这种安排中,所有请求都会被检查,如果它们在 URL 中包含像id 这样的数字,那么将被@Param ('id') id: string吸收,首先执行,然后如果请求参数中没有数字则继续执行。
if ( !Number.isInteger(id) ) next();
Run Code Online (Sandbox Code Playgroud)
如果输入参数不是INTEGER ,则 if 语句会更改角色并转到下一个中间件。
| 归档时间: |
|
| 查看次数: |
3363 次 |
| 最近记录: |