ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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. 유저 삭제

     

Designed by Tistory.