모델과 테이블 연동하기

박은지·2022년 2월 13일
0

Express

목록 보기
9/10

현재 COWORK 데이터베이스에는 Members 테이블이 있다.
이 Members 테이블에는 10명의 직원 정보(10개의Row)가 존재한다.

이제 Member 모델을 통해 Members 테이블을 조작할 수 있도록 모델과 테이블을 연동하는 작업을 해주어야 한다.


Member class

이전에 데이터베이스를 생성하는 명령을 통해 Member 모델은 자동으로 생성되었다.
models 디렉토리 안의 member.js 파일이 바로 Member 모델 즉, Member class이다.

// models > member.js
 
const { Model } = require('sequelize');

// 하나의 함수가 외부로 공개되어 있는 상태
module.exports = (sequelize, DataTypes) => {
  
  // 함수 안에는 Member라는 class가 존재
  // - 이 Member class는 sequelize 패키지의 Model이라는 클래스를 상속 받고 있음
  // --> Member클래스는 Model ==> 데이터베이스에 있는 하나의  테이블에 대응되는 존재
  class Member extends Model {}
  // 모델 & 테이블 연동하는 코드
  Member.init(
    // 테이블의 각 컬럼에 대응되는 property의 이름과 데이터타입
    {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: DataTypes.INTEGER
      },
      name: DataTypes.STRING,
      team: DataTypes.STRING,
      position: DataTypes.STRING,
      emailAddress: DataTypes.STRING,
      phoneNumber: DataTypes.STRING,
      admissionDate: DataTypes.DATE,
      birthday: DataTypes.DATE,
      profileImage: DataTypes.STRING
    }, 
    // 전달받은 sequelize객체가 들어와서 Member 모델이 실제 데이터베이스에 존재하는 Members 테이블을 인식
    {
      sequelize,
      modelName: 'Member',
    },
 );
 // 테이블과 연동처리가 완료된 Member 모델 리턴 
 return Member;
  
};

sequelize 객체

이제 sequelize 객체를 생성해서 함수에 넣는 작업을 해야한다.

// models > index.js

// sequelize 패키지 가져오기
const Sequelize = require('sequelize');

// 데이터베이스 설정 정보 (config.json)
const config = require('../config/config.json');
const {
  username, password, database, host, dialect,
} = config.development;

// sequelize 클래스에 데이터베이스에 관한 설정값을 넣고 sequelize 객체 생성
const sequelize = new Sequelize(database, username, password, {
  host,
  dialect,
});

// member.js 안의 함수 가져오기
const Member = require('./member.js')(sequelize, Sequelize.DataTypes);

// db라는 객체를 만들어 그 안에 Member 모델을 넣어 공개
// (나중에 또 다른 테이블이 생기면 새로운 모델이 필요할 수도 있기 때문)
const db = {};
db.Member = Member;

module.exports = db;

0개의 댓글