Как использовать параметры в маршрутах с nestjs? - PullRequest
0 голосов
/ 11 октября 2018

Я бы хотел использовать 3 маршрута: 'проект';'Проект / 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 голосов
/ 03 июня 2019

Фактически во всех экспресс-приложениях порядок определений всех маршрутов имеет значение.

Проще говоря, это «первым пришел - первым обслужен», первым выбранным маршрутом является тот, который используется для ответа.ваш запрос.

Итак, как можно больше ставьте статические параметры вначале, а не динамические.

Единственное, что вам нужно иметь в виду, это first come first serve:)

0 голосов
/ 11 октября 2018

вы должны быть более точными при описании маршрутов.

В вашем случае Маршруты не могут понять, какой путь маршрута, а какой параметр

, вы должны сделать:

@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')

...