https://yunbo96.tistory.com/14
npm install sequelize
npm install sequelize-cli
# postgresql
npm install pg
# 폴더 & 파일 생성
npx sequelize init

{
"development": {
"username": "postgres",
"password": null,
"database": "postgres",
"host": "127.0.0.1",
"dialect": "postgres"
},
"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"
}
}
development, test, production 세 가지로 나뉘어져 있다
'use strict';
const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const basename = path.basename(__filename);
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.json')[env];
const db = {};
let sequelize;
if (config.use_env_variable) {
sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
sequelize = new Sequelize(config.database, config.username, config.password, config);
}
fs
.readdirSync(__dirname)
.filter(file => {
return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
})
.forEach(file => {
const model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes);
db[model.name] = model;
});
Object.keys(db).forEach(modelName => {
if (db[modelName].associate) {
db[modelName].associate(db);
}
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;
루프를 돌면서 import를 통해 현재 폴더 내의 모든 파일들을 불러오는데 import 메서드는 파일에 있는 model 정의들과 같은 객체를 생선한다.
즉, models 폴더 내에 정의한 모델들을 루프를 돌면서 취합한다.
그런데 이것은 모델을 정의만 하는 것이고, 실제 프로젝트 내에 모델을 등록하는 것은 뒤에서 살펴볼 sync() 메서드에 의해서 이루어진다.
아래에서는 루프를 돌며 associate() 메서드를 통해 model 사이의 관계를 정의한다.