Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug : Sequelize 작동 간 에러 수정 #24

Closed
unchaptered opened this issue Aug 14, 2022 · 0 comments
Closed

Bug : Sequelize 작동 간 에러 수정 #24

unchaptered opened this issue Aug 14, 2022 · 0 comments
Assignees
Labels
bug Something isn't working

Comments

@unchaptered
Copy link
Member

unchaptered commented Aug 14, 2022

해당 버그는 PR : 시퀄라이즈 셋팅 에서 확인되었고 PR : Seqeulize 작동 오류 수 에서 수정 되었습니다. 2022-08-14

이후에 Bug : Sequelize **Model.create({}) 시에 **Id Primary Key 가 오작동 가 추가로 발견 되었습니다. 해당 이슈를 추가로 확인해주세요.
새벽 시간대에 도움을 주신, 항해99 8기 F반 다른 조인 @codeing999@taesikyoon 께 감사드립니다.

Behavior

  1. Expected behavior
  2. Actual behavior
  3. Describe the bug

1. Expected behaviors

저희 팀은 프로젝트 루트 경로 가 아니라 src 안에 서버 파일을 보관하고 있었습니다.

따라서 하기의 npx sequelize 명령어 들도 src/sequelize 경로 아래에서 실행하였습니다.

  • npx sequelize db:create
  • npx sequelize db:migration
  • npx sequelize db:migration:undo

DB 연결부터 테이블 생성까지 큰 문제가 없었기 때문에 2022-08-15PR : 시퀄라이즈 셋팅 를 통해서 배포를 했습니다.

2. Actual behavior

실제로 2022-08-16src/sequelize/models/index.js 를 호출했을 때부터 에러가 발생했습니다.

  1. src/sequelize/models/index.js 에서 Cannot read property of undefined ( config.use_env_variable )
  2. src/sequelize/migrations/20220813143102-create-user.js 에서 User 테이블에 defaultValue 누락 건
  3. src/sequelize/models/User.js 에서 Unknown column 'id' in 'field list sequelize

3.A. Describe the bug - Cannot read property of undefined ( config.use_env_variable )

npx sequelize init 을 통해서 sequelize 를 손쉽게 설정할 수 있습니다.
해당 명령어를 입력하는 디렉토리에서 config/config.json 을 만들어주는데 거기서 사용하는 NODE_ENV 와 저희가 사용 중이던 NODE_ENV 가 달라서 생긴 문제였습니다.

기존의 package.json

    "dev": "set NODE_ENV=dev&& nodemon src/index.js",
    "start": "set NODE_ENV=prod&& node src/index.js",
    "test": "set NODE_ENV=test jest",

수정된 package.json

    "dev": "set NODE_ENV=development&& nodemon src/index.js",
    "start": "set NODE_ENV=production&& node src/index.js",
    "test": "set NODE_ENV=test&& jest",

참고한 게시글로는 Stackoverflow - Cannot read property 'use_env_variable' of undefined 와 같습니다.

3.B. Describe the bug - User 테이블에 defaultValue 누락 건

npx sequelize 하위 명령어로 만든 테이블에서는 id, createdAt, updatedAt 를 자동으로 만들고 반영해준다고 알고 있었습니다.

당연히 default 값을 준다고 생각했지만 해당 기능이 작동하지 않았습니다. 아래 명령어를 보면 JPA 와 같이 느껴졌는데, ... createdAtupdatedAt 자리에 ? 가 아니라 DEFAULT 가 들어가야 하지 않나 라고 생각했습니다.

sql: 'INSERT INTO `Users` (`id`,`email`,`nickname`,`password`,`createdAt`,`updatedAt`) VALUES (DEFAULT,?,?,?,?,?);',
  parameters: [
    'work@gmail.com',
    'unchap',
    'password1234'
  ]

실제로 MySQL Workbench 를 통해서 DB 의 User 테이블을 확인해보니 DEFAULT 항목이 공란인 것을 확인할 수 있었습니다.

image

아마도 sequelize 가 암묵적으로 제공해주던 기능이 작동하지 않는 것 같아서 명시적으로 기능을 주고 싶었습니다.

따라서 Stackoverflow - Set defaultValue to todays date in a Sequelize migration 를 통해서 문제를 해결할 수 있었습니다.

src/sequelize/migrations/20220813143102-create-user.js 파일을 다음과 같이 수정하였습니다.

  createdAt: {
      allowNull: false,
      type: Sequelize.DATE,
      defaultValue: Sequelize.NOW,
  },
  updatedAt: {
      allowNull: false,
      type: Sequelize.DATE,
      defaultValue: Sequelize.NOW,
  },

3.C. Describe the bug - Unknown column 'id' in 'field list sequelize

역시나 migration 파일에서 id 를 userId 로 재정의 하였는데, 해당 부분이 정상 작동하지 않았습니다.

아마도 src/sequelize/mirgrations/**src/sequelize/models/** 가 동기화 되지 않아서 다음과 같이 명시적으로 수정해주었습니다.

// src/sequelize/**
User.init(
    {
        userId: {
            type: DataTypes.INTEGER,
            primaryKey: true,
        },
        email: DataTypes.STRING,
        nickname: DataTypes.STRING,
        password: DataTypes.STRING,
        createdAt: DataTypes.DATE,
        updatedAt: DataTypes.DATE,
    },
    {
        sequelize,
        modelName: 'User',
    },
);

다음의 글을 참고하여 수정하였습니다.

  1. Stackoverflow - How to add primary key constraint in Sequelize
  2. Stackoverflow - Why doesn't sequelize-cli include the ID in the model file?

Details

1. Environment

- Node : v16.15.1
- npm : v8.11.0
- OS : Windows10
@unchaptered unchaptered added bug Something isn't working enhancement New feature or request labels Aug 14, 2022
@unchaptered unchaptered changed the title Sequelize 작동 간 에러 리스 Sequelize 작동 간 에러 수정 Aug 14, 2022
@unchaptered unchaptered pinned this issue Aug 14, 2022
@unchaptered unchaptered changed the title Sequelize 작동 간 에러 수정 Bug : Sequelize 작동 간 에러 수정 Aug 15, 2022
@unchaptered unchaptered removed the enhancement New feature or request label Aug 15, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants