如何在NestJS的路由中使用参数?

时间:2018-10-11 06:12:54

标签: routes nestjs

我想使用3条路线:“项目”; ‘project / 1’; “项目/作者”。 但是当我打电话给“项目/作者”时,触发了“项目/ 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));
        }

}

2 个答案:

答案 0 :(得分: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('/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));
    }

}

当您要获取单个项目时,请使用以下 @Get('/nameOfItem/:id')

答案 1 :(得分:0)

实际上,在所有快递应用中,所有路线的定义顺序都很重要。

以一种简单的方式,这是先到先得的原则,匹配的第一个路线是用于响应您的请求的路线。

尽可能将静态参数放在第一位,然后将动态参数放在第一位。

您唯一需要记住的是first come first serve:)