gpt4 book ai didi

Nestjs - Controller 内定义的路由相互覆盖

转载 作者:行者123 更新时间:2023-12-02 00:30:57 34 4
gpt4 key购买 nike

我有一个 Controller

//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
}
...

但是,/: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)

我该如何解决这个问题?任何提示或指示表示赞赏。

最佳答案

默认情况下,所有 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

改变方法在类中的位置可能会影响你的 react 。

@Get(':id')
async get(@Param('id') id: string): Promise<UserSummaryVm> {
if ( !Number.isInteger(id) ) next();
...
}

@Get('me')
async get(@Req res): Promise<UserVm> {
...
}

在这个安排中,所有请求都被检查,如果它们在 URL 中有像 id 这样的数字,那么 @Param('id') id: string 首先执行,如果请求参数中没有数字,则继续执行。

 if ( !Number.isInteger(id) ) next();

如果输入参数不是 INTEGER,If 语句会改变角色并转到下一个中​​间件。

关于Nestjs - Controller 内定义的路由相互覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51993687/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com