-
[Node.js] Nest.js로 간단한 백엔드 api 만들기Node.js 2023. 10. 4. 13:57
이번에 Node.js에 Nest.js라는 프레임워크로 간단한 백엔드 api를 만들어 보려고 합니다.
| 시작
1. 설치
npm i -g @nestjs/cli nest new project-name
먼저 이런 식으로 nest 프로젝트 폴더를 하나 만들어 보겠습니다.
그다음 예시로 user에 관한 api를 만들기 위해 터미널에
nest g co nset g s nest g mo
이런 식으로 입력한 다음 각각 name을 users로 하면
자동으로 users폴더와 하위 파일들이 아래처럼 잘 만들어집니다.
여기에서 spec이라고 쓰여있는 파일들은 테스트를 위한 파일들입니다.
현재 다룰 내용이 아니기 때문에 일단 삭제를 해주겠습니다.
2. app.module.ts
app.module.ts에서는 UsersModule을 가져와서
@Moudle에 imports 부분에 넣어주면 됩니다.
import { Module } from '@nestjs/common'; import { AppController } from './app.controller'; import { AppService } from './app.service'; import { UsersModule } from './users/users.module'; @Module({ imports: [UsersModule], controllers: [AppController], providers: [AppService], }) export class AppModule {}
3. users.module.ts
users.module.ts에서는 UsersController와 UsersService를 사용하기 위해
아래 코드처럼 작성해 주면 됩니다.
import { Module } from '@nestjs/common'; import { UsersController } from './users.controller'; import { UsersService } from './users.service'; @Module({ controllers: [UsersController], providers: [UsersService], }) export class UsersModule {}
4. user.entity.ts
유저 데이터를 위한 entity를 만들어야 하는데
users 폴더 안에 entities라는 폴더를 만들고 안에다 user.entity.ts라는 파일을 만들고
아래와 같은 코드를 작성해 주겠습니다.
export class User { id: number; name: string; age: number; }
5. users.service.ts
임시로 users데이터를 만들고 해당 데이터들을 다루는 함수들을
users.service.ts에 만들어 아래와 같이 만들어 주겠습니다.
import { Injectable, NotFoundException } from '@nestjs/common'; import { User } from './entities/user.entity'; @Injectable() export class UsersService { private users: User[] = []; getAllUsers(): User[] { return this.users; } getUserById(id: string): User { const user = this.users.find((user) => user.id === parseInt(id)); if (!user) throw new NotFoundException(`user가 존재하지 않음`); return user; } createUser(newData) { this.users.push(newData); return `유저 생성 id: ${newData.id}`; } remove(id: string) { this.getUserById(id); this.users = this.users.filter((user) => user.id !== parseInt(id)); } }
url 파라미터로 들어온 id는 string이기 때문에 parseInt로 타입을 바꿔줘야 합니다.
nest.js에서 제공하는 함수로 자동으로 타입이 변경되도록 할 수 있지만 일단 이런 식으로만 해보겠습니다.
6. users.controller.ts
이제 users.controller에서 UserService를 가져온 다음
http요청을 통하여 해당 함수들을 아래처럼 실행해 보겠습니다.
import { Body, Controller, Delete, Get, Param, Post } from '@nestjs/common'; import { UsersService } from './users.service'; @Controller('users') export class UsersController { constructor(private readonly UsersService: UsersService) {} @Get() getAllUsers() { return this.UsersService.getAllUsers(); } @Get(':id') getUserById(@Param('id') id: string) { return this.UsersService.getUserById(id); } @Post() createUser(@Body() newData) { return this.UsersService.createUser(newData); } @Delete(':id') remove(@Param('id') id: string) { return this.UsersService.remove(id); } }
| 완성
1. 유저 생성
2. 모든 유저 가져오기
3. id로 유저 가져오기
4. 유저 삭제