Не удается заставить @Get ('id') работать в учебнике Nest JS - PullRequest
0 голосов
/ 19 апреля 2020

Итак, я следую этому уроку и следую за ним, слово в слово:

https://medium.com/@kaushiksamanta23 / nest- js -tutorial-series-part-1-Введение-Setup-c87ba810ea9e

Итак, у меня есть это в моем служебном файле:

getCourse(courseId): Promise<any> {
    let id = Number(courseId);
    return new Promise(resolve => {
        const course = this.courses.find(course => course.id === id);
        if (!course) {
            throw new HttpException('Course does not exist', 404)
        }
        resolve(course);
    });
}

и это в моем контроллере, точно так же, как в учебнике, за исключением журнала:

@Get(':courseId')
async getCourse(@Param('courseId') courseId) {
    console.log(courseId)
    const course = await this.coursesService.getCourse(courseId);
    return course;
}

В POSTMAN, при вызове http://localhost: 3000 / courses / courseId = 3 , я получаю «сообщение»: «Курс не существует»

Журнал четко показывает проблема:

{ courseId: 'courseId=3' }

Поэтому, когда я пытаюсь http://localhost: 3000 / курсы / 3 , вместо этого это работает, но это не правильный путь.

Я потерян здесь мой код идентичен коду в учебнике, и я подумал, что цель @Param ('courseId') в том, чтобы распознать строку 'courseId' в качестве ключа и получить любое значение после '=' в URL. Если так, почему я получаю 'courseId = 3'? Конечно, я не должен анализировать строку вручную.

1 Ответ

0 голосов
/ 19 апреля 2020

Вы путаете параметры URL с параметрами запроса. В URL вы можете иметь параметры, которые анализируются по-разному в зависимости от обработчика маршрута. В этом случае ваш URL говорит, что у вас есть база courses, а затем параметр URL с именем courseId. Когда вы делаете запрос, URL выглядит как http://localhost/courses/3 (3 - это courseId), а затем вы получите идентификатор как req.param['courseId]. Если вы хотите использовать URL-адрес, более похожий на http://localhost/courses/?courseId=3, вам нужно вместо этого использовать @Query(), чтобы получить параметр запроса (это будет соответствовать req.query вместо req.param)

...