Параметры маршрута
Часть раздела TypeScript и NestJS путешествия по Node.js на Coddy. Урок 4 из 24.
Клиенту часто нужна одна задача, а не весь список. В пути может быть параметр: часть, которая меняется от запроса к запросу.
@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' }, а не само значение.
Задание
ЛегкоКлиенту часто нужна одна задача, а не весь список. Добавь маршрут, который возвращает задачу по её идентификатору.
- В
src/tasks/tasks.controller.tsдобавь второй метод вTasksController(назови егоfindOne) дляGET /tasks/:id.:idобозначает любое значение на этом месте пути, поэтому запрос/tasks/2попадёт в этот маршрут. - Прочитай идентификатор из пути с помощью
@Param('id'). ИмпортируйParamиз@nestjs/common. - Идентификатор приходит в виде текста, например
"2", а идентификаторы вthis.tasks— числа, и"2" === 2— это false. Преобразуй идентификатор в число перед сравнением. - Верни задачу с этим идентификатором.
- Оставь
GET /tasksбез изменений: он по-прежнему возвращает весь список.
Попробуй: отправь запрос GET /tasks/2. В ответ получишь 200 и:
{ "id": 2, "title": "Fix the login bug", "done": false }Также отправь запросы GET /tasks/1 и GET /tasks/3. Затем отправь GET /tasks/99. Задачи с таким идентификатором нет, поэтому метод ничего не возвращает, а 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
1Основы Nest
Классы и методыПривет, NestРегистрация контроллера4Guards, фильтры и перехватчики
GuardsПотренируйтесь самостоятельно: Песочница Express