NestJS로 개발을 하다가 값이 안나오고 Promise { }이 나와서 포스팅 해보려 한다. 정말 단순한 문제고 비동기함수 - Promise, async/await에 대해서만 이해를 하고있어도 간단히 해결 할 수 있다. 비동기 함수에 대해서는 다음에 제대로 정리해서 포스팅을 하겠다. 우선 어쩌다가 이런 상황이 발생했는지 보자. 간단한 내용말고는 service부에서 로직을 짜야하는데 포스팅을 위해 급하게 짠거니 감안하고 봐주시길. 꾸벅.. 자, 해당코드를 돌렸더니 Promise { } 오류가 발생했다. "const vote_ data =" 부분을 보면 서비스 부에서 값을 받아오는데 앞에서 async로 비동기를 선언했기 때문에 반드시 Promise로 반환한다. Promise는 3가지 상태가 있는데 pend..
오늘은 순환 종속성(Circular Dependency)에 대해 알아보자. NestJS로 프로젝트를 구현하다가 VoteController에서 CommentService를 사용하고 CommentService에서 VoteRepository를 사용해야 되는 케이스가 생겼다. 저번에는 단방향인(?) 공유 모듈을 사용했었는데 이번에는 양쪽 모듈에서 다 필요로하는 쌍방향(?) 모듈이다. https://ilikezzi.tistory.com/20 [Nest.JS] @Module의 특징과 공유모듈(shared module) 사용하기 공유모듈을 사용하다가 에러가 떠서 @Module에 대해서 스터디하고 해결까지 완료한 내용을 포스팅 해보려고 한다. 우선 @Module을 먼저 알아보자. Module 이란 무엇인가? 각 애플리..
공유모듈을 사용하다가 에러가 떠서 @Module에 대해서 스터디하고 해결까지 완료한 내용을 포스팅 해보려고 한다. 우선 @Module을 먼저 알아보자. Module 이란 무엇인가? 각 애플리케이션에는 최소한 하나의 모듈인 루트 모듈이 있습니다 . 루트 모듈은 Nest가 애플리케이션 그래프를 구축하는 데 사용하는 시작점입니다 . Nest가 모듈과 공급자 관계 및 종속성을 해결하는 데 사용하는 내부 데이터 구조입니다. 매우 작은 응용 프로그램은 이론적으로 루트 모듈만 가질 수 있지만 일반적인 경우는 아닙니다. 구성 요소를 구성하는 효과적인 방법으로 모듈을 강력하게 권장 한다는 점을 강조하고 싶습니다 . 따라서 대부분의 애플리케이션에서 결과 아키텍처는 각각 밀접하게 관련된 기능 집합을 캡슐화하는 여러 모듈을 ..
오늘은 NestJS에서 데코레이터중 하나를 포스팅 해보려고 한다. Api개발을 할때 Controller에서 User정보를 토큰 값으로 받아서 개발을 할때 @CurrentUser 라는 데코레이터를 많이들 사용할 것이다. - controller부 이처럼 @CurrentUser() user 를 사용하게 되면 "user" 에 토큰으로받은 유저정보가 담기게 될것이다. console.log(user)를 해보면 user정보가 잘 넘어온다는 것을 확인해 볼 수 있을 것이다. 하지만 이럴경우 Service부로 넘어가는 파라미터가 두개가 되고 user관련 데이터 정제를 하게될 시 코드가 길어진다는 단점이 있다. 그래서 이런단점을 커버해주기 위해서 요새는 @CurrentUser 대신 다른 데코레이터를 사용한다. @UseIn..
에러 코드가 상당히 긴편이다,, NestJS에서 api를 개발하고 돌려볼려는데 갑자기 에러가 나왔다. "Nest can't resolve dependencies of the FollowsService (?). Please make sure that the argument Repository at index [0] is available in the Appmodule" 에러로그를 보면 index[0] 위치의 Repository가 Module에서 사용가능한지 확인을 요구하고 있다. 여기서 Index[0]이란? Service 클래스의 생성자에 주입한 첫번째 인자를 뜻한다. @Injectable() export class FollowsService { constructor( private readonly fol..
오늘은 TypeOrm method인 save(), insert(), update() 에 대해서 알아보려고 한다. 얼핏보기에는 비슷해서 아무거나 써도 될 것 같은데 이게 별거 아닌 것 같아도 성능에도 영향을 끼친다. 우선 typeorm 공식 홈페이지에 나와있는 사진을 보면서 한개씩 알아보자. SAVE() save() 메서드는 값이 없으면 insert 기능을 하여 데이터를 저장하고 값이 존재하면 덮어쓴다. 그러고 저장된값을 select해서 리턴한다. 수정할때 save()는 기존의 데이터를 위에 덮어쓰는 방식이라서 기존데이터가 사라진다. 쉽게말해 document단위로 데이터를 변경한다. ex) 필드가 5개 존재하고 save로 2개의 필드를 수정하려면 5개의 필드는 전부 사라지고 2개의 필드만 저장된다. INS..
NestJS ParseIntPipe 우선 파이프란 Injectable( ) 데코레이터이며 data transformation 과 data validation 을 주 목적으로 사용한다. - data transformation 이란? 입력데이터를 원하는 형식으로 변환하는 것을 말하며 예를 들어 문자열에서 정수로 바꾸는 것을 의미한다. - data Validation 이란? 단어 그대로 데이터 검증이다. 유효성 체크로 입력 데이터를 평가하고 유효한 경우 변경되지 않은 상태로 전달한다. 그렇지 않고 데이터가 올바르지 않을 떈 예외를 발생시킨다. Nest의 pipe는 크게 두 종류가 있는데 직접 만들어 사용하는 파이프를 커스텀 파이프 라고 하고 미리 만들어진 것을 빌트인 파이프 라고 한다. 오늘 볼 ParseIn..
Class-transform을 다루기전에 Model Mapper에 대해서 먼저 대략적으로 알아보자. Model Mapper 이 Model Mapper란 쉽게 말해 object에 필드값을 원하는 모양의 object로 매핑시켜주는 라이브러리다. Typescript에서 Model Mapper는 class-transform이 있다. class-transform중에서 plainToInstance에 대해서 포스팅을 해보려고 한다. 해당 코드는 Nest.js에 service부 이다. plainToInstance 는 무엇이며 excludeExtraneuosValues 는 무엇이고 이걸 왜 쓰는것일까? 하나하나씩 알아보자. 사용이유? 코드를 보면 DB Layer와 View Layer 사이의 역할을 분리하기 위해 Enti..
Node.js 실행중인 서버 확인 및 종료하기 - address already in use 터미널 창에서 "address already in use(####)" 라고 Node.js 오류가 뜰 때 lsof -i TCP:3000 // 3000 은 예시이고 해당 address already in use[포트번호]에 있는 포트 번호를 써주자 명령어를 입력하게 되면 위 사진처럼 현재 사용중인 포트정보를 보여준다. 여기서 본인이 알고있는 프로젝트면 해당프로젝트 터미널창에서 ctrl+c 를 눌러서 종료시켜주자. 하지만 잘 모르거나 해당 서버의 cmd가 없을경우 종료할 PID를 이렇게 입력하자. kill -9 581 // 581대신의 삭제할 PID를 입력해주자 이러면 삭제 되었을 것 이다. 제대로 삭제되었는지 확인 해..