Menu
CoddyTech

라우트 매개변수

Coddy Node.js 여정의 TypeScript와 NestJS 섹션에 포함된 레슨. 24개 중 4번째.

클라이언트는 전체 목록이 아니라 작업 하나만 필요한 경우가 많습니다. 경로에는 매개변수를 넣을 수 있습니다. 요청마다 달라지는 부분입니다.

@Get(':isbn')
findOne(@Param('isbn') isbn: string) {
    return this.books.find((book) => book.isbn === isbn);
}

:isbn은 경로의 해당 위치에 있는 어떤 값과도 일치하므로 GET /books/978 요청은 이 메서드에 도달합니다. @Param('isbn')은 그 값을 메서드에 전달합니다. 값은 항상 텍스트입니다. /books/42는 문자열 '42'를 전달하며, 숫자 42를 전달하지 않습니다.

이름을 생략하면 @Param()은 값 대신 모든 매개변수가 담긴 객체 { isbn: '978' }를 전달합니다.

challenge icon

챌린지

쉬움

클라이언트는 전체 목록이 아니라 작업 하나만 원하는 경우가 많습니다. id로 작업 하나를 반환하는 경로를 추가하세요.

  1. src/tasks/tasks.controller.ts에서 TasksController에 두 번째 메서드(findOne이라고 부르세요)를 추가하여 GET /tasks/:id를 처리하세요. :id는 경로의 해당 위치에 올 수 있는 모든 값을 나타내므로, /tasks/2 요청이 이 메서드에 도달합니다.
  2. @Param('id')를 사용해 경로에서 id를 읽으세요. @nestjs/common에서 Param을 가져오세요.
  3. id는 "2"처럼 텍스트로 전달되지만, this.tasks의 id는 숫자이며 "2" === 2는 false입니다. 비교하기 전에 id를 숫자로 변환하세요.
  4. 해당 id를 가진 작업을 반환하세요.
  5. GET /tasks는 그대로 두세요. 여전히 전체 목록을 반환합니다.

테스트해 보세요: GET /tasks/2를 보내세요. 200 응답과 다음 결과를 받습니다.

{ "id": 2, "title": "Fix the login bug", "done": false }

GET /tasks/1과 GET /tasks/3도 보내 보세요. 그런 다음 GET /tasks/99를 보내세요. 해당 id를 가진 작업이 없으므로 메서드는 아무것도 반환하지 않고, Nest는 200 응답과 빈 본문을 보냅니다. 현재로서는 이것이 예상된 동작입니다. 이 동작은 클라이언트에 아무런 정보도 전달하지 않으며, 이후 강의에서 이를 수정합니다.

직접 해보기

import { Controller, Get } from '@nestjs/common';

interface Task {
    id: number;
    title: string;
    done: boolean;
}

@Controller('tasks')
export class TasksController {
    private tasks: Task[] = [
        { id: 1, title: 'Write the README', done: true },
        { id: 2, title: 'Fix the login bug', done: false },
        { id: 3, title: 'Plan the sprint', done: false },
    ];

    @Get()
    findAll(): Task[] {
        return this.tasks;
    }
}

TypeScript와 NestJS의 모든 레슨

직접 연습해 보세요: Express 플레이그라운드