Routes 如何在带有nestjs的管线中使用参数?

Routes 如何在带有nestjs的管线中使用参数?,routes,nestjs,Routes,Nestjs,我想使用3条路线:“项目”项目/1';'项目/作者”。 但是当我调用“project/authors”时,触发了“project/1”,我得到了一个错误。如何避免它 @Controller('project') export class ProjectController { @Get() async getProjects(@Res() res): Promise<ProjectDto[]> { return

我想使用3条路线:“项目”项目/1';'项目/作者”。 但是当我调用“project/authors”时,触发了“project/1”,我得到了一个错误。如何避免它

    @Controller('project')
    export class ProjectController {

        @Get()
        async getProjects(@Res() res): Promise<ProjectDto[]> {
            return await this.projectService.getProjects(0, 0).then(projects => res.json(projects));
        }
        @Get(':id')
        async getProject(@Param('id', new ParseIntPipe()) id, @Res() res): Promise<ProjectDto> {
            return await this.projectService.getProjects(id).then(project => res.json(project[0]));
        }

        @Get('/authors')
        async getAuthors(@Res() res): Promise<AuthorDto[]> {
            return await this.projectService.getAuthors().then(authors => res.json(authors));
        }

}
@控制器(“项目”)
导出类ProjectController{
@得到()
异步getProjects(@Res()Res):承诺{
return等待this.projectService.getProjects(0,0)。然后(projects=>res.json(projects));
}
@获取(':id')
异步getProject(@Param('id',new ParseIntPipe())id,@Res()Res):承诺{
return等待this.projectService.getProjects(id).then(project=>res.json(project[0]);
}
@获取(“/authors”)
异步getAuthors(@Res()Res):承诺{
return等待this.projectService.getAuthors()。然后(authors=>res.json(authors));
}
}

在描述路线时,您应该更详细地说明

在您的情况下,Routes无法理解哪个是路由路径,哪个是参数

你应该做:

@Controller('project')
export class ProjectController {

    @Get()
    async getProjects(@Res() res): Promise<ProjectDto[]> {
        return await this.projectService.getProjects(0, 0).then(projects => res.json(projects));
    }
    @Get('/project/:id')
    async getProject(@Param('id', new ParseIntPipe()) id, @Res() res): Promise<ProjectDto> {
        return await this.projectService.getProjects(id).then(project => res.json(project[0]));
    }

    @Get('/authors')
    async getAuthors(@Res() res): Promise<AuthorDto[]> {
        return await this.projectService.getAuthors().then(authors => res.json(authors));
    }

}
@控制器(“项目”)
导出类ProjectController{
@得到()
异步getProjects(@Res()Res):承诺{
return等待this.projectService.getProjects(0,0)。然后(projects=>res.json(projects));
}
@获取('/project/:id')
异步getProject(@Param('id',new ParseIntPipe())id,@Res()Res):承诺{
return等待this.projectService.getProjects(id).then(project=>res.json(project[0]);
}
@获取(“/authors”)
异步getAuthors(@Res()Res):承诺{
return等待this.projectService.getAuthors()。然后(authors=>res.json(authors));
}
}
当您想要获取单个项目时,请使用以下命令
@Get('/nameOfItem/:id')

事实上,在所有express应用程序中,所有路由的定义顺序都很重要

简单地说,这是一种先到先得的服务,匹配的第一条路线就是用来响应您的请求的路线

因此,尽可能先考虑静态参数,然后再考虑动态参数


你必须记住的唯一一件事是
先到先得
:)

我找到了另一个答案@alexDuck谢谢你的链接,它实际上比公认的解决方案解释得更好。