TIL : MySQL 오류 해결하기

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

이전 시간에는 회원가입을 해서 유저정보 저장하는 회원정보를 받아 게시글을 저장하는 SQL을 작성했다.

따라서 오늘은 회원가입 및 회원정보 조회, 로그인을 할 수 있는 API를 작성할 예정이다.

우선은 회원가입 시 회원정보를 저장하는 API를 작성.

// 회원가입 API
router.post('/users', async (req, res) => {
  const { nickname, password, confirm } = req.body;
  const isExistUser = await Users.findOne({
    where: {
      nickname: nickname,
    },
  });
  try {
    // Validation 작업
    // 닉네임 중복확인
    if (isExistUser) {
      return res.status(412).json({ errorMessage: '중복된 닉네임입니다.' });
    }
    // 닉네임 형식이 비정상적인 경우
    if (nickname.length < 3 || nickname.match(/^[A-Za-z0-9]+$/)) {
      return res
        .status(412)
        .json({ errorMessage: '닉네임의 형식이 일치하지 않습니다.' });
    }
    // password와 confirm 일치하지 않는 경우
    if (password !== confirm) {
      return res
        .status(412)
        .json({ errorMessage: '패스워드가 일치하지 않습니다.' });
    }
    // password 형식이 비정상적인 경우 or 닉네임이 포함된 경우
    if (password.length < 4 || password === nickname) {
      return res.status(412).json({
        errorMessage:
          '패스워드의 형식이 일치하지 않거나 닉네임이 포함되어 있습니다.',
      });
    }
    const user = await Users.create({ nickname, password });
    return res.status(201).json({ message: '회원가입이 완료되었습니다.' });
  } catch (err) {
    console.err(err);
    res
      .status(400)
      .json({ errorMessage: '요청한 데이터 형식이 올바르지 않습니다.' });
  }
});

thunder client에서 실행 후 에러가 떴다. 에러 내용은 createdAt과 updatedAt의 컬럼을 찾을 수 없다는 것이었다. 그래서 MySQL에 들어가 해당 시트를 들어가 desc Users를 쳐봤다.

에러의 내용대로 createdAt과 updatedAt의 컬럼이 존재하지 않았다.

문제점 찾아보기
1) migrations 폴더 확인
2) models 폴더 확인
답은 migrations 폴더 내에 있었다. createdAt과 updatedAt설정이 빠져있었다.
그러면 테이블을 drop하고 다시 설정해야 한다.

npx sequelize db:drop
npx sequelize db:create
npx sequelize db:migrate

그런데 문득 이렇게 문제가 생길때마다 drop하고 create하고 migrate해야하나..? 강의 중간에 이런일이 발생했을 때 데이터 손실이 되지않고도 수정할 수 있는 방법이 있다고 했던 것 같은데 기억이 나지 않는다. 아무튼 나는 아직 생성중인 단계이기 때문에 혹시모를 에러를 줄이기 위해 삭제하고 생성하고 다시 설정했다.


테이블을 수정하고 다시 실행을 하니 해결이 되었다!

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

0개의 댓글