개발 학습일지(TIL)

TIL : Cannot read properties of undefined (reading 'findAll') Sequlize 사용 중

Veams 2022. 12. 26.

내일배움캠프 Today I Learned

 

@ 학습한 내용

Sequelize - MySQL사용 이슈

 

1. 문제상황

express.js를 통해  Sequlelize, MySQL 를 이용하여

쇼핑몰을 제작하는 예제를 학습하고 있었다.

 

app.js 을 실행하여, 웹페이지를 열고,

회원가입창에서 가입 처리(회원 DB 생성)를 시도할 때마다,  다음의 에러가 자꾸 발생하면서 서버가 종료됐다.

 

Cannot read properties of undefined (reading 'findAll')

 

DB 는 생성된 상태인데 이상했다.

router.post("/users", async (req, res) => {
  const { nickname, email, password, confirmPassword } = req.body;

  if (password !== confirmPassword) {
    res.status(400).send({
      errorMessage: "패스워드가 패스워드 확인란과 동일하지 않습니다.",
    });
    return;
  }
  console.log(User)
  const existUsers = await User.findAll({
    where: {
      [Op.or]: [{ nickname }, { email }],
    },
  });
  if (existUsers.length) {
    res.status(400).send({
      errorMessage: "이미 가입된 이메일 또는 닉네임이 있습니다.",
    });
    return;
  }

  await User.create({ email, nickname, password });

  res.status(201).send({ message: "회원 가입에 성공하였습니다." });
});

도대체 문제가 무엇인지 파악할 수 없어서 console.log(User)를 찍어보니,

에러가 발생할 때 undefined라고 같이 찍혔다.

 

2. 문제파악

Cannot read properties of undefined (reading 'findAll')

위 오류는 User 모델에 해당하는 테이블이 undefined된, 즉 테이블이 정의되지 않은 상태라고 이해할 수 있다.

- 이런 경우 Cannot read properties of undefined (reading 'findOne')으로도 에러가 발생할 수 있을 것이다.

 

내가 이전에 사용하던 MongoDB, Mongoose 의 경우엔 테이블이 없더라도,

데이터가 입력되면 자동으로 테이블을 생성해주었다.

 

하지만 Sequelize 를 사용하는 경우엔 테이블 없이 데이터를 입력하더라도 자동으로 테이블을 생성해주지 않는다.

이 때문에 테이블을 생성(혹은 지정)해줘야 하는 특성이 있다.

 

3. 해법

그래서 나의 경우엔 터미널에서 다음과 같이 User 모델을 생성하는 명령어를 입력하고 models 폴더의 user.js를 생성하였다.

npx sequelize model:generate --name User --attributes email:string,nickname:string,password:string

npx sequelize db:generate --name 테이블이름 --attributes 컬럼네임:데이터타입

 

 

npx sequelize db:create

(npx sequelize db:migrate)

 

 

(이때 migrations폴더에 파일이 함께 생성됐다.)

 

해결 완료

참고

- migrations 폴더 내 정보는 실제 DB에 있는 테이블을 만들기 위해서 사용한다.

- models의 폴더 내 정보는 실제로 express 내에서 해당하는 DB에 있는 테이블을 사용하기 위해서 쓴다.

 

 

문제파악을 위한 참고 문서

https://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040202&docId=302525032 

 

nodejs 고수만요.. 모듈을 불러들이는 과정에서 자꾸 오류가납니다.

전송하기 버튼을 누르면 자꾸 Cannot read property 'findAll' of undefined 이런 에러가 뜹니다.. 이유를 모르겠어요app.js 파일이구요..var ...

kin.naver.com

 

댓글