Генерация ресурса в Nest
Новая тема требует модуля, страницы, сервиса, классов передачи данных и описания записи. Каждый раз повторяют одну схему папок, и легко забыть связать классы в модуле.
Команда nest generate resource
из корня проекта создаёт заготовку
REST CRUD: модуль, контроллер,
сервис, DTO, класс сущности
и подключает модуль к корню.
CLI спросит транспорт REST
и нужны ли точки CRUD.
Ключ --no-spec убирает
файлы тестов.
Покажем на примере постов:
nest generate resource posts --no-spec
В папке темы появятся модуль,
контроллер PostsController,
сервис, два DTO и
entities/post.entity.ts.
Импорты между файлами темы
CLI дописывает с суффиксом
.js под ESM. Контроллер
несёт префикс posts
и заготовки CRUD:
import { Module } from '@nestjs/common';
import { PostsService } from './posts.service.js';
import { PostsController } from './posts.controller.js';
@Module({
controllers: [PostsController],
providers: [PostsService],
})
export class PostsModule {}
import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common';
import { PostsService } from './posts.service.js';
import { CreatePostDto } from './dto/create-post.dto.js';
import { UpdatePostDto } from './dto/update-post.dto.js';
@Controller('posts')
export class PostsController {
constructor(private postsService: PostsService) {}
@Post()
create(@Body() createPostDto: CreatePostDto) {
return this.postsService.create(createPostDto);
}
@Get()
findAll() {
return this.postsService.findAll();
}
@Get(':id')
findOne(@Param('id') id: string) {
return this.postsService.findOne(+id);
}
@Patch(':id')
update(@Param('id') id: string, @Body() updatePostDto: UpdatePostDto) {
return this.postsService.update(+id, updatePostDto);
}
@Delete(':id')
remove(@Param('id') id: string) {
return this.postsService.remove(+id);
}
}
export class Post {}
Корневой модуль получит импорт
PostsModule:
import { Module } from '@nestjs/common';
import { PostsModule } from './posts/posts.module.js';
@Module({
imports: [PostsModule],
})
export class AppModule {}
Сгенерируйте REST ресурс работников,
чтобы появились WorkersModule,
WorkersController,
WorkersService и класс
сущности в папке темы, подключённый
к корневому модулю.