본문 바로가기

프로젝트 개발

23.12.27(오류 해결, 프로젝트 완성)

 

todo

하위 카테고리 등록 성공 > 수정 삭제 조회 성공하기

레시피 등록할 때 카테고리도 등록 가능하게 수정하기

 

기획하던 것 중 포기한 것 - 회원탈퇴, 찜 기능, 이미지 aws등록 > 가라?로 프론트에서 준 파일 그대로 저장하기

 

 

 

 

카테고리 관련 문제

 

 

분명 넘버로 주고 있는데 넘버로 인식 못하고 있음

상위는 등록 성공 / 하위는 넘버 이슈로 등록 실패

 

 

 

>>원인 찾아보기

컨트롤러에서 number로 주고 있는데 @param으로 줄 때 스트링으로 인식하는 듯 

@Post('/:topCategoryId')
createSub(
  @Param('topCategoryId', ParseIntPipetopCategoryId: number,
  @Body() createSubDto: CreateSubDto,
): Promise< Sub > {
  return this. subService . createSub (topCategoryId);
}

 

parseInPipe 지우고 topCategoryId: number 를 string으로 바꿈 + return 보내주기 전에 parseInt로 바꿈

 

  @Post('/:topCategoryId')
  createSub(
    @Param('topCategoryId') topCategoryId: string,
    @Body() createSubDto: CreateSubDto,
  ): Promise<Sub> {
    const parseIntTopId = parseInt(topCategoryId);
    if (isNaN(parseIntTopId)) {
      throw new BadRequestException('Invalid topCategoryId');
    }
    return this.subService.createSub(parseIntTopId, createSubDto);
  }

 

바꿔도 해당 오류 계속 나는 중.. 다른 코드도 찾아보기

 

  async createSub(
    topCategoryId: number,
    createSubDto: CreateSubDto,
  ): Promise<Sub> {
    const top = await this.topRepository.findOneBy({ topCategoryId });
    if (!top) {
      throw new NotFoundException(
        `Can't find Top Category with id ${topCategoryId}`,
      );
    }

    const sub = this.subRepository.create({
      top,
      ...createSubDto,
    });

서비스 쪽도 스트링으로 바꿔야 하나 생각하다가 findOneBy에 parseInt를 붙여서 바꾸지 못해서 에러 나서 다시 원상복구..

 

 

알아보던 중 class-transformer 라이브러리를 사용하는 방법이 았다고 한다.  > 해당 라이브러리가 형변환 가능하게 해 줌

 

<create-sub.dto.ts>

import { Type } from 'class-transformer';
import { IsNumber, IsString } from 'class-validator';

export class CreateSubDto {
  @IsString()
  subCategoryType: string;

  @IsNumber()
  @Type(() => Number)
  readonly topCategoryId: number;
}

 

바뀐 건 없고 똑같은 에러 발생 중 뭣이 문제요..  콘솔도 찍어보고 싶은데 잘 안 찍히고 서버만 돌아가는 중.. 이걸 해결해야 레시피에 카테고리 등록도 할텐디..구글링 해서 찾아본 건 다 해본 거 같은데 대체 왜 안되는지 모르겠다

 

 

찾아보니까 지금은 상위 카테고리 엔티티 자체를 리턴하고 있어서?? 하위 카테고리에서 상위 아이디를 인식하지 못하고 있는 것 같다. 다른 모델에서 아이디를 받아오려면 dto를 따로 만들어서 response로 리턴해서 보내주면 된다고 한다. 아니면 queryBuilder를 써서 특정 아이디를 가진 상위 카테고리를 조회해서 등록하는 방법이 있다고 한다. 

어떻게 써야 할지도 감이 안오는데 만들어둔 레시피 리뷰에도 같은 방법으로 써야할 것 같은데 코치님도 자세하게 안 알려주시고 써본 적도 없어서 감이 안 잡히고 마감까지 얼마 남지도 않아서 뭐부터 하면 될지 어떻게 해야 할 지도 잘 모르겠다.. 

 

코치님이 대신 작성해 주신 join 코드고 아직 어떻게 활용해야 할지는 잘 모르겠다 연결은 했는데 포스트맨 같이 활용할 때 어떻게 적어야 할지..? 애먹는 와중에 발표까지 하루 전이라 일단 데이터를 db에 때려 박는 식으로 진행하려고 한다.

 

이미지도 원래 s3로 하려고 했는데 버킷 만드는 것까진 어렵진 않은데 어떻게 넣어야 할지도 모르겠고 포스트맨으로 넣어 보려고 해도 아무것도 안 떠서 일단 db에 쑤셔 넣기로 한다. 구글 드라이브에 사진 올려두면 f12로 이미지 자체 링크받아와서 하나하나 넣어주었다. 대신 이 방법은 post 할 때 이미지가 안 들어간다는 것.. 자체적으로 db를 손봐야 한다.. 이렇게  db 쑤셔 박는 작업은 카테고리별로 5개 정도에 크리스마스만 8개로 넣었다. 대신 무한 스크롤 못함.. 팀장님 미안해요..

 

 

이미지 적용 완료~~

만개의 레시피에서 이미지 가져온 게 많은데 아무래도 일반인이 찍은 것이다 보니 퀄리티가 랜덤이다

그래도 돌아가는 쓰레기 정도는 완성한 거 같아 고생한 팀원분들께 감사를.. 3주 동안 고생 많으셨습니다

 

 

#엘리스트랙 #엘리스트랙후기 #리액트네이티브강좌 #온라인코딩부트캠프 #온라인코딩학원 #프론트엔드학원 #개발자국비지원 #개발자부트캠프 #국비지원부트캠프 #프론트엔드국비지원 #React #Styledcomponent #React Router Dom #Redux #Typescript #Javascript