ORM 기반으로, DB 쿼리를 날릴 때 하드코딩으로 작성하지 않아도 된다.
promise 기반으로 구현되었기 때문에 비동기 로직을 편리하게 사용할 수 있다.
npm install sequelize mysql2
import { Sequelize } from 'sequelize';
import dotenv from 'dotenv';
import { join } from 'path';
dotenv.config();
const sequelize = new Sequelize(
process.env.MYSQL_DATABASE as string,
process.env.MYSQL_USER as string,
process.env.MYSQL_PASSWORD,
{
host: process.env.MYSQL_HOST,
port: 13306,
dialect: 'mysql',
pool: { max: 30, min: 0, idle: 10000 },
logging: false
}
);
export default sequelize;
sequelize-cli를 이용해 sequelize 초기화를 시켜주어 다른 폴더까지 생성을 해줄 수 있는데, 나 같은 경우에는 미리 생성해둔 폴더와 일부 겹쳐 초기화를 따로 진행하지 않았다
development, test, production config만 추후에 별도로 변경하면 될 듯 싶다
import { Model, DataTypes, Sequelize } from "sequelize";
interface MemberAttributes {
email : string
pwd : string
profile : string
}
class MemberModel extends Model<MemberAttributes> {
public email!: string;
public pwd!: string;
public profile! : string;
}
export default function(sequelize: Sequelize): typeof MemberModel {
MemberModel.init(
{
email: {
type: DataTypes.STRING(50),
allowNull: false,
primaryKey: true
},
pwd: {
type: DataTypes.STRING(255),
allowNull: false
},
profile: {
type: DataTypes.STRING(255),
allowNull: true
}
},
{
modelName: 'member',
tableName: 'member',
sequelize,
timestamps: false
}
);
return MemberModel;
}
Sequelize를 사용하려면 모델 생성해서 db와 맞추어야한다
모델을 생성해서 쿼리를 날릴 때, 중간에 계속 나는 정작 사용하지 않는 createAt, updateAt 필드를 찾으려고 하길래 이를 무시하기 위해 timestamps: false 를 설정해야한다
import sequelize from '@database/sequelize'
import MemberModel from './member';
const DB = {
sequelize,
member: MemberModel(sequelize)
}
export default DB;
사용하기 쉽도록 객체화 하여 사용한다
const chkEmail = await DB.member.findOne({ where: { email: reqBody.email} });
await DB.member.create({
email: reqBody.email,
pwd: reqBody.password,
profile: reqBody.profile
});
index model에서 추출한 DB로 조작할 member를 선택하여 쿼리를 수행한다
쿼리 사용 방법은 아래 블로그에 잘 정리되어있는 듯 하니 아래 블로그를 참고하자