Node.js/NodeJS-book

Sequelize 모델 만들기

느리지만 꾸준하게 2022. 1. 5. 21:02

Create table 만드는 3가지 방법

  • 명령어 창에서 만드는 법

  • Workbench로 만드는 법
  • 모델을 통해서 만드는 법

이번 Sequelize를 만들 때는 모델을 만들어서 진행해보자.

 

User라는 모델을 만들고(mysql에서는 table)

class 안에 static init을 만들어 주고 return super.init도 넣어주자.

그리고 init안에 컬럼들을 넣어준다. 그리고 sequelize에서 id는 자동으로 생기기 때문에 생략해주자.

 

super init의 첫번째 인수는 컬럼정의이고 두번째 인수는 모델의 설정을 뜻한다.(1. name~ 2. sequelize,~)

// user.js

const Sequelize = require('sequelize');
const { SequelizeMethod } = require('sequelize/dist/lib/utils');

module.exports = class User extends Sequelize.Model {
    static init(sequelize) {
        return super.init({
            // id: {
            //     type: Sequelize.INTEGER,
            //     primaryKey : true,
            //     autoIncrement: true,
            // },
            name: {
                type: Sequelize.STRING(20),
                allowNull: false, // not null
                unique: true,
            },
            age: {
                type: Sequelize.INTEGER,UNSIGNED,
                allowNull: false,
            },
            married: {
                type: Sequelize.BOOLEAN, // true false
                allowNull: false,
            },
            comment: {
                type: Sequelize.TEXT,
                allowNull: true,
            },
            created_at: {
                type: Sequelize.DATE, // DATETIME, MYSQL DATE -> Sequelize DateOnly
                allowNull: false,
                defaultValue: Sequelize.NOW,
            },
            // createAt, updateAt, deletedAt: true // soft delete
        }, {
            sequelize,
            timestamps: true, // timestamp가 true면 createdAt,이랑 updatedAt 두개를 동시에 넣어준다.
            underscored: false,
            modelName: 'User',
            tableName: 'users',
            paranoid: false,
            charset: 'utf8',
            collate: 'utf8_general_ci',
        });
    }

    static associate(db) {
        db.User.hasMany(db.Comment, { foreignKey: 'commenter', sourceKey: 'id'});
    } 
}

sequelize가 mysql이랑 조금씩 다른데

sequelize는 mysql  / mssql /  postgre /  mariaDB / Oracle까지는 가능하고 5개를 동시에 지원하다 보니까 컬럼을 표현하는 자료형 방식이 각자 다르다.

 

그리고 comment와 user.js를 설정해줬으면 require 하고 init을 해준다.

init하면서 sequelize를 연결시켜줌으로써 모델이랑 sequelize 즉 모델이랑 mysql을 연결시켜준다.

sequelize를 통해서 테이블 만들고 모델을 만들어 보았다.

// user.js

const Sequelize = require('sequelize');
const User = require('./user');
const Comment = require('./comment');

const env = process.env.NODE_ENV || 'development';
const config = require('../config/config')[env];
const db = {};

const sequelize = new Sequelize(config.database, config.username, config.password, config);

db.sequelize = sequelize;
db.sequelize = sequelize;

db.User = User;
db.Comment = Comment;

User.init(sequelize);
Comment.init(sequelize);

User.associate(db);
Comment.associate(db);

module.exports = db;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<출처 조현영: Node.js 교과서 - 기본부터 프로젝트 실습까지 >

https://www.inflearn.com/course/%EB%85%B8%EB%93%9C-%EA%B5%90%EA%B3%BC%EC%84%9C/dashboard

 

[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지 - 인프런 | 강의

노드가 무엇인지부터, 자바스크립트 최신 문법, 노드의 API, npm, 모듈 시스템, 데이터베이스, 테스팅 등을 배우고 5가지 실전 예제로 프로젝트를 만들어 나갑니다. 최종적으로 클라우드에 서비스

www.inflearn.com