본문 바로가기

Node.js/node sequelize

node mysql sequelize(1) mysql 연동및 테이블 생성하기

npm init
npm i express sequelize sequelize-cli mysql2 morgan
npm i -D nodemon
npx sequelize init

config/config.json

{
  "development": {
    "username": "root",
    "password": "root",
    "database": "sequelize",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "test": {
    "username": "root",
    "password": null,
    "database": "database_test",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "production": {
    "username": "root",
    "password": null,
    "database": "database_production",
    "host": "127.0.0.1",
    "dialect": "mysql"
  }
}

 

 

 

modees/index.js 를 수정해준다.

models/index.js

 

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

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

db.sequelize = sequelize;

module.exports = db;

 

MySQL Workbench에서 

DB스키마를 생성해준다

이후 작업들은 전부 시퀄라이즈로 가능하다 

 

 

서버실행시 일단 정상적으로 DB 접속이 가능하다.

 

 

데이터 자료 비교형

MySQL Sequelize
VARCHAR STRING
TINYINT BOOLEAN
DATETIME dATE
NOT NULL allwNull : False
UNIQUE unique:true
DEFAULT now() Sequelize.NOW

 

 

 

models/user.js

const Sequelize = require("sequelize");

module.exports = class User extends Sequelize.Model {
  // init 메서드 테이블에 대한 설정을 하고
  // associate 메서드는 다른 모델과의 관계를 적습니다
  static init(sequelize) {
    return super.init(
      { 
        name:{
            type : Sequelize.STRING(20),
            allowNull : false,
            unique: true
        },
        age:{
            type: Sequelize.INTEGER.UNSIGNED //양수
        },
        comment: {
          type: Sequelize.STRING(100),
          allowNull: false,
        },

      },
      {
        sequelize, //해당 부분에 db.sequelize 객체가 들어간다. 
        timestamps: true,  //true로 하면 createdAt과 updatedAt을 생성한다.
        underscored: false, //기본적으로 테이블명과 컬럼명을 CamelCase로 바꾸는데 snake case로 변경해준다
        modelName: "User", //모델 이름을 설정할 수있다
        tableName: "User", //기본적으로 모델이름을 소문자및 복수형으로 만드는데 모델이 User면 users가된다
        paranoid:false, // true로 설정하면 deletedAt 컬럼이 생긴다. 삭제시 완전히 지워지지 않고 deletedAt에 지운시각이 기록된다.
        charset:'utf8mb4', //이모티콘까지 입력되게하려면 utf8mb4와 utf8mb4_general_ci오입력한다
        collate:'utf8mb4_general_ci'
      }
    );
  }
  static associate(db){}

  // VARCHAR STRING
  // INT INTEGER
  // TINYINT BOOLEAN
  // DATETIME DATE
  // NOT NULL allowNull: false
  // UNIQUE unique:true
  // DEFAULT now() defalutValue:Sequelize.NOW
};

 

models/index.js

const Sequelize = require('sequelize');
const User = require('./user');
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.json')[env];
const db = {};

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

db.sequelize = sequelize;

db.User = User;
User.init(sequelize);


module.exports = db;

User.init 을 통해 테이블을 생성해준다

테이블이 정상적으로 생성이 되었다.