Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Генерация кода: nest CLI

Файлы NestJS почти всегда начинаются с одинаковых строк: импорт, декоратор, пустой класс. Nest CLI создаёт такие заготовки командой nest generate и сразу подключает их к нужному модулю, чтобы вам не приходилось делать это вручную.

Одна заготовка

Команды запускают из корня проекта. Слово generate можно сократить до g:

nest g module posts
nest g controller posts
nest g service posts

Появится папка src/posts/ с файлами posts.module.ts, posts.controller.ts и posts.service.ts. CLI сам добавит PostsModule в imports корневого модуля, а контроллер и сервис — в PostsModule. В терминале видно, какие файлы созданы (CREATE) и изменены (UPDATE).

Целый ресурс

Ресурс — всё, что нужно для одной сущности API: модуль, контроллер, сервис, DTO и класс сущности. Для блога создадим статьи:

nest g resource posts

CLI задаст два вопроса. На вопрос о транспортном слое выберите REST API, на вопрос о генерации CRUD-точек ответьте Y. Результат:

src/posts/
├── dto/
│   ├── create-post.dto.ts
│   └── update-post.dto.ts
├── entities/
│   └── post.entity.ts
├── posts.controller.spec.ts
├── posts.controller.ts
├── posts.module.ts
├── posts.service.spec.ts
└── posts.service.ts

CRUD — четыре базовых действия с данными: создание, чтение, изменение и удаление. Контроллер уже содержит пять маршрутов: GET /posts, GET /posts/:id, POST /posts, PATCH /posts/:id и DELETE /posts/:id. Откройте http://localhost:3000/posts — появится строка This action returns all posts. Её возвращает сгенерированный сервис; настоящий код вы напишете в следующих уроках.

Полезные флаги

ФлагЧто делает
--dry-run или -dПоказывает, что будет создано, но не создаёт файлы
--no-specНе создавать файл теста .spec.ts
--flatНе создавать отдельную папку
nest g controller comments --dry-run

Команда напечатает список файлов, но на диске ничего не изменится — удобно, чтобы проверить себя.

Какие заготовки бывают

КомандаЧто создаёт
nest g moduleМодуль
nest g controllerКонтроллер
nest g serviceСервис
nest g resourceМодуль, контроллер, сервис, DTO и сущность
nest g pipeПайп
nest g guardГард
nest g interceptorПерехватчик
nest g middlewareПромежуточный обработчик

Полный список показывает nest g --help.

Частая ошибка

Если создать файл контроллера вручную и забыть указать его в массиве controllers модуля, NestJS о нём не узнает: маршруты будут отвечать 404 без каких-либо ошибок при запуске. Пользуйтесь nest g — он регистрирует классы сам. А если создаёте файл руками, сразу добавьте класс в модуль.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.