라우트 매개변수
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' }를 전달합니다.
챌린지
쉬움클라이언트는 전체 목록이 아니라 작업 하나만 원하는 경우가 많습니다. id로 작업 하나를 반환하는 경로를 추가하세요.
src/tasks/tasks.controller.ts에서TasksController에 두 번째 메서드(findOne이라고 부르세요)를 추가하여GET /tasks/:id를 처리하세요.:id는 경로의 해당 위치에 올 수 있는 모든 값을 나타내므로,/tasks/2요청이 이 메서드에 도달합니다.@Param('id')를 사용해 경로에서 id를 읽으세요.@nestjs/common에서Param을 가져오세요.- id는
"2"처럼 텍스트로 전달되지만,this.tasks의 id는 숫자이며"2" === 2는 false입니다. 비교하기 전에 id를 숫자로 변환하세요. - 해당 id를 가진 작업을 반환하세요.
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 플레이그라운드