NestJS+TypeORM으로 백엔드 구축 PART1 【설치, RESTAPI 구현】
16710 단어 NestJSTypeORMTypeScript
-1- 준비편
1.nestjs를 설치하여 프로젝트를 만듭니다.
nestjs 설치 및 프로젝트 작성 npm i -g @nestjs/cli
nest new project-name
2. 프로젝트를 열고 필요한 패키지를 설치합니다.
프로젝트에 필요한 npm 패키지 설치 npm i --save @nestjs/core @nestjs/common rxjs reflect-metadata
npm i --save @nestjs/typeorm typeorm mysql2
3. 프로젝트의 루트 디렉토리에 ormconfig.json 만들기
나중에 ER 다이어그램을 자동으로 만들고 싶으므로 ormconfig.json을 사용하여 DB 정보를 전달합니다.
ormconfig.json{
"type": "mysql",
"host": "localhost",
"port": 3305,
"username": "root",
"password": "root",
"database": "test",
"entities": ["dist/**/*.entity{.ts,.js}"],
"synchronize": true
}
4. mysql 컨테이너를 3305번 포트에서 시작
3305번 포트에서 mysql 컨테이너를 기동docker run -it \
-e MYSQL_DATABASE=test \
-e MYSQL_ROOT_PASSWORD=root \
-p 3305:3306 \
-d mysql
-2- 구축편
-1- app.module.ts 편집
app.module.tsimport { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import {TypeOrmModule} from "@nestjs/typeorm";
@Module({
imports: [TypeOrmModule.forRoot()],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
-2- UsersModule을 CLI로 작성
nest g module users
nest g service users
nest g controller users
users라는 디렉토리가 CLI에 의해 src에 작성됩니다.
그런 다음 라우팅을 위해 컨트롤러와 컨트롤러에서 호출되어 처리하는 서비스도 만들어 둡니다.
-3- user.entity.ts 작성 및 편집
users 디렉토리에 user.entity.ts를 만듭니다. 여기는 CLI에서 만들 수 없으므로 수동으로 만들 수 있습니다.
user.entity.tsimport { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
firstName: string;
@Column()
lastName: string;
@Column({ default: true })
isActive: boolean;
}
-4- users.module.ts 편집
CLI가 자동으로 공급자와 컨트롤러를 추가하므로 편집이 필요한 것은 TypeORM 관계뿐입니다.
users.module.tsimport { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UsersService } from './users.service';
import { UsersController } from './users.controller';
import { User } from './user.entity';
@Module({
imports: [TypeOrmModule.forFeature([User])],
providers: [UsersService],
controllers: [UsersController],
})
export class UsersModule {}
-5- users.service.ts 편집
users.service.tsimport { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { User } from './user.entity';
@Injectable()
export class UsersService {
constructor(
@InjectRepository(User)
private usersRepository: Repository<User>,
) {}
findAll(): Promise<User[]> {
return this.usersRepository.find();
}
findOne(id: string): Promise<User> {
return this.usersRepository.findOne(id);
}
async remove(id: string): Promise<void> {
await this.usersRepository.delete(id);
}
}
-6- users.controller.ts 편집
users.service.tsimport { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { User } from './user.entity';
@Injectable()
export class UsersService {
constructor(
@InjectRepository(User)
private usersRepository: Repository<User>,
) {}
findAll(): Promise<User[]> {
return this.usersRepository.find();
}
findOne(id: string): Promise<User> {
return this.usersRepository.findOne(id);
}
async remove(id: string): Promise<void> {
await this.usersRepository.delete(id);
}
}
-3- 확인편
여기까지 끝나면 또 한숨입니다!
-1- 프로젝트 시작
npm run start:dev
※dev를 붙이면 파일의 변경을 한 경우에 검지해, 마음대로 재실행해 주기 때문에 편리합니다.
-2- 데이터베이스 확인
Workbench에서 데이터베이스를 확인하면 test 데이터베이스 안에 user 테이블이 생겼는지 확인할 수 있습니다. 또한 RESTAPI를 테스트하기 위해 User 테이블에 적절하게 데이터를 넣습니다.
-3- RESTAPI 확인
RESTAPI도 제대로 작동합니다.
요약
여기까지의 소스는 이쪽
part2에서 TypeORM의 관계의 구현과 ER 다이어그램의 자동 작성을 실시합니다.
Reference
이 문제에 관하여(NestJS+TypeORM으로 백엔드 구축 PART1 【설치, RESTAPI 구현】), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ms2geki/items/6bf1f1740ed1b8bd9905
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
npm i -g @nestjs/cli
nest new project-name
npm i --save @nestjs/core @nestjs/common rxjs reflect-metadata
npm i --save @nestjs/typeorm typeorm mysql2
{
"type": "mysql",
"host": "localhost",
"port": 3305,
"username": "root",
"password": "root",
"database": "test",
"entities": ["dist/**/*.entity{.ts,.js}"],
"synchronize": true
}
docker run -it \
-e MYSQL_DATABASE=test \
-e MYSQL_ROOT_PASSWORD=root \
-p 3305:3306 \
-d mysql
-1- app.module.ts 편집
app.module.ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import {TypeOrmModule} from "@nestjs/typeorm";
@Module({
imports: [TypeOrmModule.forRoot()],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
-2- UsersModule을 CLI로 작성
nest g module users
nest g service users
nest g controller users
users라는 디렉토리가 CLI에 의해 src에 작성됩니다.
그런 다음 라우팅을 위해 컨트롤러와 컨트롤러에서 호출되어 처리하는 서비스도 만들어 둡니다.
-3- user.entity.ts 작성 및 편집
users 디렉토리에 user.entity.ts를 만듭니다. 여기는 CLI에서 만들 수 없으므로 수동으로 만들 수 있습니다.
user.entity.ts
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
firstName: string;
@Column()
lastName: string;
@Column({ default: true })
isActive: boolean;
}
-4- users.module.ts 편집
CLI가 자동으로 공급자와 컨트롤러를 추가하므로 편집이 필요한 것은 TypeORM 관계뿐입니다.
users.module.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UsersService } from './users.service';
import { UsersController } from './users.controller';
import { User } from './user.entity';
@Module({
imports: [TypeOrmModule.forFeature([User])],
providers: [UsersService],
controllers: [UsersController],
})
export class UsersModule {}
-5- users.service.ts 편집
users.service.ts
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { User } from './user.entity';
@Injectable()
export class UsersService {
constructor(
@InjectRepository(User)
private usersRepository: Repository<User>,
) {}
findAll(): Promise<User[]> {
return this.usersRepository.find();
}
findOne(id: string): Promise<User> {
return this.usersRepository.findOne(id);
}
async remove(id: string): Promise<void> {
await this.usersRepository.delete(id);
}
}
-6- users.controller.ts 편집
users.service.ts
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { User } from './user.entity';
@Injectable()
export class UsersService {
constructor(
@InjectRepository(User)
private usersRepository: Repository<User>,
) {}
findAll(): Promise<User[]> {
return this.usersRepository.find();
}
findOne(id: string): Promise<User> {
return this.usersRepository.findOne(id);
}
async remove(id: string): Promise<void> {
await this.usersRepository.delete(id);
}
}
-3- 확인편
여기까지 끝나면 또 한숨입니다!
-1- 프로젝트 시작
npm run start:dev
※dev를 붙이면 파일의 변경을 한 경우에 검지해, 마음대로 재실행해 주기 때문에 편리합니다.
-2- 데이터베이스 확인
Workbench에서 데이터베이스를 확인하면 test 데이터베이스 안에 user 테이블이 생겼는지 확인할 수 있습니다. 또한 RESTAPI를 테스트하기 위해 User 테이블에 적절하게 데이터를 넣습니다.
-3- RESTAPI 확인
RESTAPI도 제대로 작동합니다.
요약
여기까지의 소스는 이쪽
part2에서 TypeORM의 관계의 구현과 ER 다이어그램의 자동 작성을 실시합니다.
Reference
이 문제에 관하여(NestJS+TypeORM으로 백엔드 구축 PART1 【설치, RESTAPI 구현】), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ms2geki/items/6bf1f1740ed1b8bd9905
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
npm run start:dev
여기까지의 소스는 이쪽
part2에서 TypeORM의 관계의 구현과 ER 다이어그램의 자동 작성을 실시합니다.
Reference
이 문제에 관하여(NestJS+TypeORM으로 백엔드 구축 PART1 【설치, RESTAPI 구현】), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ms2geki/items/6bf1f1740ed1b8bd9905텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)