처음 nest new
의 목적
나는 일에 있어서NestJS를 사용하지만, 나 자신은 그렇지 않다.해본 적이 없어 학습의 의미에서 간단한 크루 처리를 만들었고, 그래서 기록을 남기고 싶어 키보드를 들었다.
컨디션
OS:macOS Big Sur 11.1
Node:v14.4.0
NestJS:7.5.4
가져오기
npm i -g @nestjs/cli
신축 공사
nest new nestjs_todo
필요한 물건을 가져오다
npm i @nestjs/typeorm typeorm mysql2 class-transformer class-validator
ormconfig.json 만들기
ormconfig.json
{
"name": "default",
"type": "mysql",
"host": "localhost",
"port": 3306,
"username": "root",
"password": "",
"database": "nest",
"synchronize": true,
"logging": true,
"entities": [
"dist/entities/**/*.entity.js"
],
"migrations": [
"dist/migrations/**/*.js"
]
}
엔티티 파일 만들기
src/entities/task.entity.ts
import {
Entity,
Column,
PrimaryGeneratedColumn,
CreateDateColumn,
UpdateDateColumn,
} from "typeorm";
@Entity()
export class Task {
@PrimaryGeneratedColumn()
readonly id: number;
@Column()
title: string;
@CreateDateColumn()
readonly createdAt?: Date;
@UpdateDateColumn()
readonly updatedAt?: Date;
}
migration 파일 만들기
npx typeorm migration:generate -d src/migrations -n create-task
src/migrations/1608641968685-create-task.tsimport {MigrationInterface, QueryRunner} from "typeorm";
export class createTask1608641968685 implements MigrationInterface {
name = 'createTask1608641968685'
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query("CREATE TABLE `task` (`id` int NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, `createdAt` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), `updatedAt` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), PRIMARY KEY (`id`)) ENGINE=InnoDB");
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query("DROP TABLE `task`");
}
}
실행
npx typeorm migration:run
Controller 만들기
nest g controller tasks
src/tasks/tasks.controller.tsimport { Controller } from '@nestjs/common';
@Controller('tasks')
export class TasksController {}
서비스 작성
nest g service tasks
src/tasks/tasks.service.tsimport { Injectable } from '@nestjs/common';
@Injectable()
export class TasksService {}
모듈 생성
nest g module tasks
src/tasks/tasks.module.tsimport { Module } from '@nestjs/common';
@Module({})
export class TasksModule {}
읽기 처리 설치
src/tasks/tasks.controller.ts
import { Controller, Get } from '@nestjs/common';
import { Task } from 'src/entities/task.entity';
import { TasksService } from './tasks.service'
@Controller('tasks')
export class TasksController {
constructor(private readonly taskService: TasksService) {}
@Get()
async findAll(): Promise<Task[]> {
return await this.taskService.findAll()
}
}
src/tasks/tasks.module.tsimport { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Task } from 'src/entities/task.entity';
import { TasksController } from './tasks.controller';
import { TasksService } from './tasks.service';
@Module({
controllers: [TasksController],
imports: [TypeOrmModule.forFeature([Task])],
providers: [TasksService],
exports: [TypeOrmModule],
})
export class TasksModule {}
src/tasks/tasks.service.tsimport { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Task } from 'src/entities/task.entity';
import { Repository } from 'typeorm';
@Injectable()
export class TasksService {
constructor(
@InjectRepository(Task)
private readonly taskRepository: Repository<Task>
) {}
async findAll(): Promise<Task[]> {
return await this.taskRepository.find()
}
}
Create 처리 수행
src/dto/create-task.dto.ts
import { IsNotEmpty, IsString } from "class-validator";
export class CreateTaskDTO {
@IsNotEmpty()
@IsString()
title: string;
}
src/main.tsimport { ValidationPipe } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
// 追加
app.useGlobalPipes(new ValidationPipe());
await app.listen(3000);
}
bootstrap();
src/tasks/tasks.controller.ts@Post()
async create(@Body() createTaskDto: CreateTaskDTO) {
return await this.taskService.create(createTaskDto)
}
src/tasks/tasks.service.tsasync create(task: CreateTaskDTO): Promise<InsertResult> {
return await this.taskRepository.insert(task)
}
업데이트 처리
src/dto/update-task.dto.ts
import { IsNotEmpty, IsString } from "class-validator";
export class UpdateTaskDto {
@IsNotEmpty()
@IsString()
title: string;
}
src/tasks/tasks.controller.ts@Put(':id')
async update(@Param('id') id: string, @Body() updateTaskDto: UpdateTaskDto) {
return await this.taskService.update(+id, updateTaskDto)
}
src/tasks/tasks.service.tsasync update(id: number, updateTaskDto: UpdateTaskDto) {
return await this.taskRepository.update(id, updateTaskDto)
}
Delete 프로세스 설치
src/tasks/tasks.controller.ts
@Delete(':id')
async remove(@Param('id') id: string) {
return this.taskService.remove(+id)
}
src/tasks/tasks.service.tsasync remove(id: number) {
return await this.taskRepository.delete(id)
}
감상
제로에서부터 스스로 시도하는 것은 큰 부분이지만 새로운 지식을 늘릴 수 있다.그리고 공식 홈페이지의 문서의 이해성을 다시 한 번 느꼈다.
코드 전체는 아래 창고를 통해 확인할 수 있습니다.
참고 자료
Reference
이 문제에 관하여(처음 nest new), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/youheiyouhei/articles/6b2000a29979a998780d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)