Nest 1주차

세현·2022년 11월 18일
0

첫 시작

엘리스 SW 엔지니어 트랙 3기를 따라가면서 node.js를 공부해보고 express를 사용해보고 nest.js까지 공부해보려고 한다. 홧팅

기본적인 흐름

브라우저에서 버튼을 누른 순간 해당 이벤트가 등록이 되면서 해당되는 API 요청을 벡엔드로 보낸다. 백엔드는 데이터베이스에 필요한 데이터를 가지고 오면서 가공하는 로직 부분과 프론트엔드에 결과를 보내주는 역할을 담당한다.
브라우저 간 통신에서 규칙을 지키면서 보내야 하는데 여기서 규칙이나 규격을 프로토콜이라고 한다. 브라우저에서는 HTTP 프로토콜

REST ful

GET,POST,PUT,PATCH,DELETE => 이거로도 목적을 이해 가능
데이터베이스의 내부 구조를 반영하는 API는 만들지 마라.

package.json 파일의 scripts 부분에 실행할 명령어와 그에 대한 명령문을 저장할 수 있다.

서버는 라우터를 통해 해당 경로에 대한 요청을 받는다.

모킹

  • 데이터 모킹 : 테스트를 실행하기 위해 실제 데이터가 아니라 개발자의 필요에 의해 만들어진 데이터
import * as express from "express";
const app: express.Express = express();

const data=[1,2,3,4,5,6];

app.get("/",(req: express.Request,res:express.Response)=>{
    console.log(req);
    res.send({data});
})

app.listen(8000,()=>{
    console.log('server is on...');
})

기존 express를 작성하던 방식에 typescript를 적용한 코드이다. 익숙해지자!

미들웨어

next => 미들웨어 함수의 콜백 인수

  • 각각의 라우터에 재사용하고 싶은 공통된 기능을 미들웨어로 만든다.
  • 미들웨어는 순서가 중요하다. 뒤에 있다면 미들웨어를 거치지 않는다.

기본형태

app.use((req,res,next)=>{
    ~~~
    next();
})

맨 마지막에 에러를 반환해주는 미들웨어를 작성하는 방법도 있다.
ㄴ 그렇게 되면 잘못된 주소로 접근하면 에러 반환하는 형태

Controllers

공식 문서를 참고한다.

https://docs.nestjs.com/controllers

express의 Router와 유사하다고 느꼇고 decorator사용에 익숙해져야 할 거 같다.

공식 문서에 정의 된 내용 중 DTO라는 것이 있었는데,

// create-cat.dto.ts

export class CreateCatDto {
  name: string;
  age: number;
  breed: string;
}
// cats.controller.ts
@Post()
async create(@Body() createCatDto: CreateCatDto) {
  return 'This action adds a new cat';
}

이 DTO는 body의 형식 및 속성을 정의하는 느낌인 거 같다. 몽구스의 스키마 부분이 생각이 난다.

Providers

서비스를 제공하는 모듈은 공급자,
공급자로 취급이 되는 친구들은 @Injectable() 데코레이터를 사용 가능

이런 공급한 기능들을 Controller에서 사용한다.

내가 이해하기엔 의존성 주입은 공급자가 제공하는 기능을 Controller에서 사용하는 부분인 것 같다. 서비스들이 기능을 제공하는 공급자이고, Controller의 constructor 부분에 service로 공급자의 기능을 사용한다고 선언하는 부분이 의존성 주입이라고 하는 것 같다.

modules

nest g module cats

이 명령문을 사용하면 cats 모듈을 생성할 수 있다.
모듈명은 대체로 복수형으로 사용

nest g co cats

이 명령문을 사용하면 cats의 controller 생성

nest g service cats

이 명령문을 사용하면 cats의 service 생성

middelwares

express의 미들웨어와 동일하다.

// 무엇이 어떤 요청을 했는지 확인하는 미들웨어
nest g middlware logger

이 명령문은 미들웨어를 생성

미들웨어를 사용하는 곳은 app.module.ts 이곳이다.
export하는 부분에 implemets를 사용한다.

export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer.apply(LoggerMiddleware).forRoutes('cats');
  }
}

Pipes

Param 데코레이터를 사용해서 param의 값을 가져올수 있다.

@Get(":id")
getOneCat(@Param('id') param){
	console.log(param);
    return;
}

여기서 param의 변수 형태를 바꿔서 적용시킬 수 있는 방법이 있다. Pipes다.

@Get(":id")
getOneCat(@Param('id', ParseIntPipe) param:number){
	console.log(param);
    return;
}

param의 타입을 확인해보면 Number로 나온다.
이 방식의 좋은 점은 param의 값으로 내가 생각하지 않았던 값들이 넘어올 수 있다.
위 코드에서는 String data가 그 예시일 것이다.
param의 값으로 String data가 넘어오게 된다면 error 코드를 반환해준다.

profile
안녕하세요

0개의 댓글