Nest

송은우·2022년 3월 20일
0

app.useGlobalFilter(new HttpExceptionFilter());
라는 거를 작성하면 모든 http exception을 다 잡아서 처리해 줌

async 안에서 throw가 되는 것은 자동을 삼켜짐. un handled warning 이라는 처리가 되지만, controller에서 await을 해버리면, 그 에러가 바깥으로 빠져나오기에, 그 에러를 제대로 Filter로 잡을 수 있음

service의 에러를 controller로 퍼져 나가게 해야 한다는 점을 해야 함

HttpException 대신 BadRequestException같은 HttpException을 상속받는 방법으로 처리할 수가 있긴 함.
그러면 status code를 안 줘도 알아서 처리가 가능하다는 커다란 장점이 있음

class-validator
dto로 검증할 수 있다.
class-validator 를 이용하면 decoratory로 별에 별 decorator가 있기에 이를 편하게 처리할 수 있음.
공식 문서에 나와있음 이것 역시도 techniques 에 있는 validation 란을 볼 수 있음
app.useGlobalPipes(new ValidationPipe());
class validator가 있는 경우 위 코드로 다 검증까지 해줌
같은 것이 있음
dto를 통해 조금 편하게 할 수도 있다

이때 메세지를 수정하고 싶다면 exception filter를 사용할 수 있음
err의 타입이 뭔지 그 내부에서 분기처리를 할 수 있음
interceptor도 사실 가능하기는 하지만, 조금 더 명칭에 맞게 하는 것이 조금 깔끔하긴 함

Faq에 request lifecycle 에 보면 어떤 순서로 적용되는지 전부 다 나와 있음
interceptor 과 exception filter의 순서같은 것들은 다 볼 수 있음
시각적으로 보기 좋은 사이트

guard라는 것으로 이제 보통 로그인 처리를 하게 됨.
되게 앞부분에 실행되기에 여러 가지 단계를 거치지 않고 바로 처리할 수 있단 장점이 있음
@nestjs/passport 라는 것으로 passport라이브러리 대신 사용함 그 이유는 nestjs 는 모듈로 돌아가기에

const { password, ...userWithoutPassword } = user;
구조분해 문법이 되게 간단하게 password만 제거할 수 있음
서비스 안에 서비스는 웬만하면 안 쓰는 게 좋긴 함.
물론 절대는 아님.
테스팅의 유효성

profile
학생의 마음가짐으로 최선을 다하자

0개의 댓글