Генерация кода: 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 postsCLI задаст два вопроса. На вопрос о транспортном слое выберите 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.tsCRUD — четыре базовых действия с данными: создание, чтение, изменение и удаление. Контроллер уже содержит пять маршрутов: 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 — он регистрирует классы сам. А если создаёте файл руками, сразу добавьте класс в модуль.