현재 COWORK 데이터베이스에는 Members 테이블이 있다.
이 Members 테이블에는 10명의 직원 정보(10개의Row)가 존재한다.
이제 Member 모델을 통해 Members 테이블을 조작할 수 있도록 모델과 테이블을 연동하는 작업을 해주어야 한다.
이전에 데이터베이스를 생성하는 명령을 통해 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 객체를 생성해서 함수에 넣는 작업을 해야한다.
// 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;