TIL 21일차 (20230123)

박세연·2024년 1월 23일

TIL

목록 보기
16/70

오늘은 nodejs와 mongodb, aws ec2 배포를 사용한 쇼핑몰 백엔드 구축 과제의 제출일이다! 오늘 쓸 것은 어제와 오늘 마주했던 에러들과 개선 방안이다.


🥺 gitignore가 적용이 안돼요!

  • git init을 하지 않았거나
  • gitignore을 작성하기 전에 git init과 git add .을 해버려서 이미 기록이 남아버린 경우...

-> 로컬 .git 파일을 삭제해서 다시 시작했다! 일반 창에선 보이지 않고 보기 중 표시 -> 숨긴 파일을 눌러야 흐릿한 .git파일이 보이고 그것을 삭제했다.


🥺 ubuntu에서 git clone받고 node app.js 실행했을 때 mongoDB에 연결이 안돼요!

  • gitignore때문에 env 파일이 받아지지 않은 것.
    우분투 창에서 sudo vim .env 입력 후 엄청 많은 ~~~의 향연이 일어나는데 무시하고 env 내용 복붙 후 :wq(저장하고 종료)한 후 ls -la하면 env 파일이 생성되어 있다! 그 후 mongoDB 연결은 잘 된다.

🥺 .prettierrc.json이 적용이 안돼요!

  • yarn으로 prettier를 다운받을 뿐만 아니라
//package.json

"scripts": {
    "format": "prettier --write *.js **/*.js"
  }

이므로 yarn run format까지 해줘야 prettier가 적용된다.


🥺 insomnia에서는 실행이 되는데 aws 배포했을 때는 실행이 안돼요!

  • 오류를 봐야 아는 것이겠지만 나같은 경우는 get을 못해왔다.

    (처음 코드)
    두번째 get에서 productsId에서 req.params 부분을 못 가져오는 것이었다. 위의 get은 req가 없더니 잘 실행되었고.


(수정한 코드)
그래서 req.params.productId로 특정을 지었더니 잘 찾아왔다.


(여담)

문제는 이 부분을 수정하고 나니 수정 기능과 삭제 기능에서 에러가 발생... 이유는 아직도 모르겠음🙄 아무튼 수정한 코드는 아래와 같다.

/** 상품 정보(content,) 수정 API(pw 동일시)**/
router.patch('/products/:productsId', async (req, res) => {
  const productsId = req.params.productsId;
  const { product, content, pw, soldStatus } = req.body;

  // 나의 id에 맞는 상품이 무엇인지 찾는다.
  const currentProduct = await Item.findById(productsId).exec();
  if (!currentProduct) {
    return res
      .status(404)
      .json({ errorMessage: '상품 조회에 실패하였습니다.' });
  }

  //비밀번호가 일치할 때 수정 기능
  if (product) {
    const targetProduct = await Item.findOne({ product }).exec();
    if (pw === targetProduct.pw && product === targetProduct.product) {
      targetProduct.content = currentProduct.content;
      targetProduct.soldStatus = currentProduct.soldStatus;
      await targetProduct.save();
    } else {
      return res
        .status(404)
        .json({ errorMessage: '상품명과 비밀번호가 다릅니다.' });
    }
    currentProduct.content = content;
    currentProduct.soldStatus = soldStatus;
  } else {
    return res
      .status(404)
      .json({ errorMessage: '상품 조회에 실패하였습니다.' });
  }

문제 상황은 상품의 이름과 비밀번호를 맞게 입력했는데 상품명과 비밀번호가 다르다는 에러 메세지가 뜨는 것이었다...
상품 조회에 실패했다는 메세지가 뜨지 않은 것으로 보아 req은 잘 수행했고, 비밀번호가 문제라는 것인데 알고보니 나빼고 다른 사람들 다 비밀번호가 string이었더라🥲.. 그래서 혹시 number가 string으로 변환된것인가 싶어 typeof치고 console.log로 pw 출력해보았는데 여전히 숫자가 맞았다.

... 문제는 내가 입력한 비밀번호였다. 맞는 비밀번호는 1234였는데 엉뚱한 숫자를 입력한 것🙃... 노드는 잘못이 없었다.

(내 헛짓거리에 낮잠도 반려하고 도와주신 이전 팀원들에게 무한한 감사를 보냅니다)

#내일배움캠프TIL

profile
배워나가는 중

0개의 댓글