본문 바로가기

Backend/NestJS

(47)
Docker 빌드 에러 developement pipeline에 배포를 하려고 하니 아래와 같은 에러가 발생하였다. 터미널에서도 에러 안나는거 확인했는데 막상 배포하려고 하니 에러가.. 아래 문구만 봐서는 Docker 파일 내부에 문제가 있는 것 같았으나 해당 프로젝트의 Dockerfile-development와 다른 프로젝트의 Dockerfile-development 둘다 버전 등을 확인해보았는데도 다른 부분은 없었다. 그래서 View the log to see the remaining 732 error for this task를 열어보니 엄청난 에러가 발생하였다..ㄷㄷ 로그를 좀만 더 내려서 보니 Swagger을 적용했던 DTO와 Entity 파일에서 에러가 발생하고 있었다. @ApiProperty() import도 잘 되..
TypeError: Cannot read properties of null(reading 'id') 문제 상황 static create() 메소드를 dto 파일 내부에 만들면서, 엔티티 객체로 받는 파라미터 값을 처음에 A entity로 연결했었다. ex) static create(popup: Popup) { Popup 엔티티로 파라미터를 받았다가, static create(popup: PopupMultilingual) { PopupMultilingual 엔티티로 파라미터를 변경하였다. DB에 생성된 id(type:uuid)값을 가져와서 포스트맨에서 Body 부분에 테스트를 하려고 보니, TypeError: Cannot read properties of null(reading 'id') 라는 에러가 발생하였다. 해결 방법 처음에 Popup 엔티티에 있는 id 값을 가져왔었기 때문에, PopupMulti..
Parameter id is not described in JSDoc controller.ts 파일에서 @Get() 메소드 위에 Todo문 하나를 작성해놓은 상태였다. /** * Todo: 팝업 한 개 반환 API * @param dto */ @ApiTags('팝업 한 개 반환 API') @Get('/:id') async getOnePopup(@Param('id') id: string) { return Response.okWith(await this.popupApiService.getOne(id)); } 그런데 @Param('id') id:string 부분에서 노란색으로 감싸져있어서 마우스를 올려보았더니, Paramter id is not described in JSDoc 이라는 문구가 출력되었다. JSDoc이 뭐지.. JSDocument의 줄임말인가?하고 생각해보며 구글..
NestJS 10 버전업 과정 기존에는 nest 버전을 9버전대를 사용하고 있었다. (nestjs 버전 확인은 package.json에서 @nestjs/core을 확인하면 된다. 그런데 7월 중순경에 10버전이 출시했다는 소식을 듣고, 우리 팀은 nestjs 9버전에서 10버전으로 업그레이드를 해보았다. "@nestjs/core": "^10.1.2" 9버전에서 10버전으로 갔는데 엄청난 type error가 발생하고 있었다. 더군다나 web3 모듈의 경우 지금 최신이 4버전인가 그런데 아직 1버전을 쓰고 있었는데 우리가 먼저 업데이트를 하면 안됐어서 web3와 블록체인 관련 모듈은 업그레이드를 하지 않고 nest와 typescript 관련 모듈만 최신으로 업그레이드를 하였다. https://docs.nestjs.com/migratio..
@Controller 데코레이터 위에 @UseGuards()를 선언했을 경우와 메소드에서만 선언했을때 차이점 들어가기 앞서, @UseGuards() 데코레이터란? Guard란 permission, roles 등에 따라서 주어진 request가 route handler에 의해 handling이 될지 말지를 결정한다. authorization 구현에 많이 쓰이는데, 나 또한 admin에서 특정 권한을 가진 role이 약관 동의 업데이트 시 account 테이블 내의 특정 컬럼들을 한 번에 false로 만드는 작업을 해야했다. 이 작업을 위해 @UseGuards()를 사용해야 했었다. 그러나 여기서 한 가지 놓치고 있었던 점이 있다. 바로 @UseGuards() 데코레이터의 선언 위치였다. @Controller 데코레이터 위에서 선언했을때와 @UseGuards(RolesAuthGuard) @Controller('ad..
QueryFailedError: invalid input syntax for type uuid RESTFUL API를 만들면서 QueryFailedError: invalid input syntax for type uuid 라는 에러가 발생했다. 상황은 이렇다. controller.ts 파일에서 @Put() 메서드에 url path 지정을 하지 않고 API DEV 환경에 배포를 해놓은 상황이고, 프론트엔드단에서 이 API를 토대로 데이터를 사용하려던 중에 다른 @Put('/:id') 메서드와 경로가 겹칠 수 있다는 것이다. 그래서 다시 확인을 해보았다. 나는 @Put()을 지정했던 이유가, 위와 같은 에러가 계속 발생해서 url path 지정을 따로 해주지 않았던 것인데, 해당 에러가 나는 상황에서 에러로그를 살펴보니, @Put('/:id')를 쓰는 곳에서 무언가 문제가 발생하여, 자꾸 내가 작성한..
timestamp 처리하는 방법 timestamp를 처리할 일이 있어 entity 파일에 아래와 같이 timestamp의 type을 Date 객체 타입으로 지정하였는데, @Column({ type: 'timestamp' }) @Transform(transformDate) timestamp: Date; Postman에서 이를 기반으로 timestamp값을 Body 안에 넣고, DTO 등등의 파일에서도 Date 객체 값으로 선언을 하였더니 'timestamp must be Date instance'라는 400 에러가 발생하였다. (왜지) 내가 시도해본 방법은 다음과 같다. 1) { "timestamp" : "2023-07-20" } 2) { "timestamp" : "2023-07-20Z00:00 ~" -> 이런 식이었는데 정확한 값이 기..
extends Repository<레포지토리명>이 아닌 <엔티티명>으로 가야하는 이유 Nestjs로 Repository에 코드를 작성하던 중에 export class AgreementApiRepository extends Repository { async findByAddress(walletAddress: string) { return this.findOne({ where: { walletAddress: ILike(walletAddress) } }); } } 이런 내용을 작성하였다. 그런데 내가 안에 삽입했던 로직에서 에러가 나고 있었다. where절 안에서 발생하는 에러였다. 에러상황 TS2322: Type '{ walletAddress: FindOperator; }' is not assignable to type 'FindOptionsWhere | FindOptionsWhere[]'...
[TypeORM] @OneToMany 그리고 @ManyToOne에서 추가로 알게 된 것들 주말에 인프런 '따라하며 배우는 NestJS'를 수강하였다. 이미 NestJS로 개발을 하고 있고, 부족한 부분을 채워넣는 것이 우선이기에 강의를 끝에서부터 듣고 있다 ㅎ 그중에 오늘 @OneToMany와 @ManyToOne에 대한 내용을 수강하였는데, 내가 놓치고 있던 부분이 있어 다시 한번 정리하고자 한다. 상황은 이렇다. 1명의 User는 여러개의 Board를 쓸 수 있다. (@OneToMany) 1개의 Board - 게시글 하나에 대해서는 여러명이서 1개의 게시글을 작성할 수 없다. (@ManyToOne) 정리하자면, User의 입장에서는 @OneToMany이고, Board의 입장에서는 @ManyToOne인 것이다. 참고로 TypeORM을 사용할때 @ManyToOne을 PostgreSQL에 적용할..
unknown_request_mapping_exception_1.UnknownRequestMappingException(metatype); 문제 상황 NestJS로 CRUD를 작성하던 중에 throw new unknown_request_mapping_exception_1.UnknownRequestMappingException(metatype); ^ Error: An invalid controller has been detected. "(모듈이름)Module" does not have the @Controller() decorator but it is being listed in the "controllers" array of some module. 라는 에러가 발생하였다. 문제 원인 module.ts 파일에서 controllers: [] 부분에서 컨트롤러 이름을 작성했어야 했는데 여기에 모듈 이름을 작성해서 위와 같은 에러가 발생했던 것이었..