TIL sequelize 에러 해결하기

ESH'S VELOG·2023년 7월 6일
0

Lv3과제를 끝내고 Lv4과제를 시작하면서 refactoring작업을 하던 중 문제가 생겼다.

**

우선 작업 내용은 이렇다.

  • Controller폴더로 각 모델들의 데이터베이스를 이용한 CRUD 작업 내역 정리
  • Models폴더로 각 데이터 테이블들의 모델을 설정
  • Middlewares폴더로 인증과 검증 절차를 설정
  • Routes폴더로 각 데이터베이스들이 만들어질 때 어떤 작업들을 걸치는지(가리키는지) 설정
  • app.js로 필요한 기본적인 라이브러리와 공통적인 부분을 작성, sequelize를 사용해 MySQL과 db.js를 동기화하고, 사용할 서버 port를 열어서 확인
  • config.js로 jwt토튼을 생성할 때 키와 MySQL 정보, port를 설정

작성을 어느정도 하고 중간점검을 하려고 node app.js를 실행하는데 아무일도 일어나지 않더니 다시 powershell의 실행이 초기화되었다.
어디에 에러가 있는지도 알려주지 않기에 난감했다.
이 때 chatGPT의 도움을 받아 app.js에서 어디서 오류를 발생시켰는지 확인할 수 있는 코드를 몇 줄 적게되었다.

  • 원래코드
// 서버를 만들기 위한 작업
const express = require('express');
const app = express();
// cookieparser
const cookieParser = require('cookie-parser');

// router
const router = require('./routes/index.js');

// config
const config = require('./config.js');

// DB - mysql
const mysql = require('./Database/db.js');

app.use(express.json());
app.use(cookieParser());
app.use('/', router);

// sequelize를 사용해 MySQL DB와 동기화 => 포트번호 확인
async () => {
  (await mysql.sync()).then(() => {
    app.listen(config.port, () => {
      console.log(`${config.port}번 포트가 열렸습니다!`);
    });
  });
};

맨 마지막에 동기화하는 과정 중 에러가 발생할 수 있다는 생각을 못하고 sync가 될거라는 생각만 했다. 이래서 에러가 발생하면 발생하는 자리에 에러 메세지를 띄워주는 검증 작업이 필요하다.

  • 수정된 코드
// 서버를 만들기 위한 작업
const express = require('express');
const app = express();
// cookieparser
const cookieParser = require('cookie-parser');

// router
const router = require('./routes/index.js');

// config
const config = require('./config.js');

// DB - mysql
const mysql = require('./Database/db.js');

app.use(express.json());
app.use(cookieParser());
app.use('/', router);

// sequelize를 사용해 MySQL DB와 동기화 => 포트번호 확인
(async () => {
  try {
    await mysql.sync();
    app.listen(config.port, () => {
      console.log(`${config.port}번 포트가 열렸습니다!`);
    });
  } catch (error) {
    console.error('서버 실행 중 오류가 발생했습니다:', error);
  }
})();

마지막에 try / catch문을 사용하여 다시 실행해봤더니 에러를 발생시키고 어느곳에서 문제가 발생했는지 알 수 있었다.

Model작성 시 게시글(posts)에서 외래키를 Users로부터 id를 받아오는데 내가 그 컬럼을 UserId라고 설정했다. 이 부분에서 중복되는 값이니 오류가 발생한 것이다. 따라서 UserId를 userId로 변경해주니 오류가 해결되고 MySQL과 연결되고 포트가 연결이 되는것을 볼 수 있었다.

profile
Backend Developer - Typescript, Javascript 를 공부합니다.

0개의 댓글