내일배움캠프 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
'개발 학습일지(TIL)' 카테고리의 다른 글
TIL : ts-node: command not found 오류 (0) | 2023.01.17 |
---|---|
TIL : Git 명령어, github에 잘못 올린 폴더 삭제 (0) | 2022.12.29 |
TIL : express.js Request와 Response (1) | 2022.12.20 |
내배캠 23일차 TIL : 미니프로젝트 진행 상황, 어려움 (0) | 2022.12.06 |
내배캠 19일차 TIL : 미니프로젝트 회의 (0) | 2022.12.06 |
댓글