Привет, Nest
Часть раздела TypeScript и NestJS путешествия по Node.js на Coddy. Урок 2 из 24.
В Express каждый маршрут — это функция, которую вы регистрируете вручную. NestJS выделяет для каждой части API отдельный класс, а декораторы сообщают Nest, за что отвечает каждый класс.
@Controller('books')
export class BooksController {
@Get()
findAll() {
return [{ title: 'Dune' }];
}
}Контроллер обрабатывает запросы для одного пути. @Controller('books') и @Get() — это декораторы. Декоратор начинается с @ и располагается на строке над классом или методом, указывая Nest, для чего он нужен. Декораторы Nest всегда заканчиваются на (), даже если внутри ничего нет. Вместе они связывают findAll с GET /books, и Nest отправляет то, что возвращает метод, в формате JSON со статусом 200. Nest никогда не отправляет запрос методу, у которого нет декоратора маршрута.
Модуль перечисляет классы, которые относятся друг к другу. src/main.ts вызывает NestFactory.create(AppModule); AppModule импортирует TasksModule, в котором перечислен TasksController. На ноутбуке вы бы запустили его командой npm run start; здесь это делает кнопка «Запустить».
В стартовом проекте interface Task описывает поля объекта задачи, а Task[] означает массив таких объектов. private оставляет поле внутри своего класса. Тип после скобок метода описывает возвращаемое им значение. Эти аннотации помогают TypeScript проверять ваш код; декораторы Nest определяют маршруты.
Задание
ЛегкоТвой первый сервер Nest уже содержит три задачи, но пока ни один маршрут их не возвращает. Добавь маршрут, который выводит их список.
- Открой
src/tasks/tasks.controller.ts. В классеTasksControllerхранится список вthis.tasks.@Controller('tasks')над классом отвечает за пути, начинающиеся с/tasks. - На месте комментария добавь метод (назови его
findAll) и пометь его декоратором@Get(). Он возвращаетthis.tasks. Nest отправляет то, что возвращает метод, в формате JSON со статусом 200. Getимпортируется из@nestjs/common, как иController. Добавь его в импорт в первой строке.
Проверь: нажми «Запустить», затем отправь GET /tasks. Ты получишь статус 200 и три задачи:
[
{ "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 /task, без s. Ни один маршрут не соответствует этому пути, поэтому Nest ответит статусом 404:
{ "message": "Cannot GET /task", "error": "Not Found", "statusCode": 404 }Попробуйте сами
import { Controller } 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 /tasks.
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела TypeScript и NestJS
Потренируйтесь самостоятельно: Песочница Express