NestJS - 작은DB와 controller + service구성하기

껌뻑이·2021년 7월 24일
0

NestJS

목록 보기
4/5
post-thumbnail

NestJS

작은 DB 만들기

users안에 fakeDB.ts파일을 만들어서 작은 DB를 만들어 보자!

export할 데이터의 이름은 datas라고 하고 안에는 id와 name 객체가 들어있는 배열을 만들자!
TypeScript니깐 그에 맞는 interface도 만들어 보자!

fakeDB.ts

// users/fakeDB.ts
export interface data {
  id: number;
  name: string;
}

const datas: data[] = [
  { id: 0, name: '홍길동' },
  { id: 1, name: '이순신' },
];

export default datas;

data의 예로 홍길동과 이순신을 넣어 봤다.

REST API

우리의 restAPI예상 주소이다.

addressinfo
/users/all모든 유저 출력
/users/1id가 1번인 유저 출력

그럼 구현해 보자

service 구현하기

service는 실제로 로직을 실행하는 부분이다.
그래서 getAll이라는 함수와 getOne이라는 함수를 만들어 우리의 예상과 맞게 datas 조리하여 알맞게 return해줘보자!

users.service.ts

import { Injectable } from '@nestjs/common';
import datas, { data } from './fakeDB';

@Injectable()
export class UsersService {
  getAll(): data[] {
    return datas;
  }

  getOne(id: number): data[] {
    return datas.filter((user) => user.id === +id);
  }
}

@Injectable()

@Injectable()는 공급자로 지정한다는 의존성을 주입한것이다.

함수 생성

getAll은 data라는 타입의 배열이 리턴된다는 것을 알리고 datas를 전부 리턴해준다.
getOne은 해당 id(id는 number타입)를 인자로 받고 그에 맞는 user만 리턴해 줄 수 있게 filter함수를 사용하여 해당 id를 리턴해준다.
// find를 써도 되지만 배열의 형식으로 리턴해주도록 하자
// number타입을 지정해줘도 string으로 나와 +로 형변환을 해줬다.

controller 구성하기

controller는 라우팅, 즉 주소를 담당하는 부분이다. service를 가져오고 그 함수에 맞게 라우팅을 구성해주자!

users.controller.ts

import { Controller, Get, Param } from '@nestjs/common';
import { data } from './fakeDB';
import { UsersService } from './users.service';

@Controller('users')
export class UsersController {
  constructor(private readonly usersService: UsersService) {}

  @Get('/all')
  getAll(): data[] {
    return this.usersService.getAll();
  }

  @Get('/:id')
  getOne(@Param('id') id: number): data[] {
    console.log(id);
    console.log(typeof id);
    return this.usersService.getOne(id);
  }
}

@Controller()

@Controller('users')는 users의 라우팅이라는 의존성 주입을 해준것이다. users는 모듈은 /users로 시작된다.

constructor

그리고 constructor, 생성자에서 userService를 가져오고 내부에서만 확인(private)하고 수정할 수 없게(readonly) 설정해주자
*생성자는 class가 생성되면 무조건 실행되는 함수라고 생각하자.

http method

@Get()은 http method 중 get을 사용한다고 생각하면 된다.
그리고 안에 맞는 주소를 입력해 주자.
// '/'는 생략가능 하지만 나는 습관이 되서 그냥 적어주었다.

함수 생성

함수 이름은 service랑 같이 하는 것이 보기에도 편하고 협업하기에도 편할 것 같다.

getAll()은 전제 데이터를 가져오는 것이니깐 data[]타입을 리턴하는 것으로 설정하고 주소는 /all로 해주었다. => users/all

getOne은 id의 값을 입력받아 그에 맞는 데이터를 리턴해주는 것이어서 parameter를 받아야 한다.
parameter를 받는 방법은 주소에 @Get(/:[parameter_name]) 으로 설정해주면 된다.

@Param()

@Param은 @nestjs/common에서 가져와 준다.
@Param()안에 들어갈 이름은 우리가 @Get()에서 설정해준 parameter 이름이랑 똑같이 해줘야 한다.
하지만 옆에서 타입을 설정할 때의 이름은 마음대로 해도 좋다. 대신 그 이름을 service함수의 매개변수로 넣어줘야 한다. 난 헷갈릴까봐 똑같이 하려고 한다ㅎㅎ

getOne()은 parameter에 맞는 데이터를 가져오는 것이니깐 data[]타입을 리턴하는 것으로 설정하고 주소는 /:id로 해주었다. => users/id

서버에서 검사하기

자 이제 서버를 띄우고 우리가 원하는대로 라우팅이 되고 원하는 값이 나오는지 확인해 보자

서버 띄우기

npm run start:dev

첫 화면

getAll()

getOne(), 1입력

우리가 생각했던대로 잘 나왔다. bb

다음 시간

이제 create와 update, delete를 구현해 보자!

0개의 댓글