npm install 

위 명령어로 해당 ORM을 설치한다. sequelize-cli는 마이그레이션 할 때에 쓰이고, sequezlie는 장고처럼 어떤 mysql의 쿼리문이 이미 작성되어있는 모듈을 제공한다.

npx sequelize init

해당 명령어를 치면 시퀄라이즈의 셋팅이 시작된다. 시퀄라이즈는 내부적으로 mysql2를 사용한다.

// config.json
{
	"development": {
		"username" : DB user name,
		"password" : DB password,
		"database" : DB name,
		~~~~"host"     : DB host,
		"port"     : DB port,
 		"dialect"  : "mysql",
		"operatorsAliases" : false
	}
} 

init을 생성하면 config에 생성된 곳에서 DB 정보를 준다. 다만 env를 사용한다면 굳이 사용하지 않아도 된다. 어차피 불러와서 시퀄라이즈 객체에 전달해주는 것이기 때문에..

import Sequelize from 'sequelize';
import User from './models/User';

const env = process.env.NODE_ENV;
const db = {};
const sequelize = new Sequelize(DB_name, DB_username, DB_password, env);

db.User = User(sequelize, Sequelzie);

Object.keys(db).forEach(modelName => {
	if (db[modeName].associate){
		db[modeName].associate(db);		
		}
	});

db.sequelize = sequelize;
db.Sequelize = Sequelize;

export default db;

위와 같이 시퀄라이즈 객체에 정보를 주고, 아래의 DB에 담긴 JSON에 있는 key값인 modeName을 조사하여 .associate라는 항목이 존재할 경우 해당 함수를 실행시키는데 이것은 FK가 설정된 모델들을 서로 연결해주는 작업을 해준다.

db.model로 하여 만들어놓은 DB model을 넣어주고, sequelize와 Sequlize을 넣어주면 접속연결 객체와 Sequelize에 담긴 메서들들이 JSON에 들어간다.

export default = (sequelize, DateTypes) => {
	const User = sequelize.define('User', { // 대문자로 써도 DB에는 user + s가 붙어 user가 된다.
		email : {
			type: DateTypes.STRING(300),
			allowNull: false // Django의 null = False 와 같다.
			unique : true // Djnago의 unique = True와 같다.
		}, // id는 자동적으로 생성해준다
		password : {
			type: DateType.STRING(50),
			allowNull: false
			}, 
	}, {
		charset: 'utf-8mb4',
		collate: 'utf-8mb4_general_ci', //한글 저장 가능 옵션
		});
	User.associate = (db) => {
			db.User.hasMany(db.???) // one to Many: user one ??? many
			db.User.hasOne(db.???) // one to one
			db.???.belongsTo(db.User); // many 관계에 있는 모델에 선언해서 넣어줘야함. 이게 FK	
		}; // 위에 만들어두었던 object.keys에서 작동시킨 함수를 여기서 선언
			db.???.belongsToMany(db.User, { through: '??????', as: 'MadeName'}); 
			// Many To Many의 FK. DB에는 model이름hashtag로 중간 테이블이 생성
			// through 옵션안에 이름을 넣어주면 자동생성이름이 아닌 수동 중간자이름이 생성이 된다.
			// through에 as 옵션 뒤에 이름을 지정하면 relate_name과 같이 이름을 대체헤서 사용가능
			db,User.belongsTo(db.User, {as: 'Follower'}) 
			// 이렇게 자기 자신에 FK를 하면 Django의 self FK가 된다.
	return User;
};

위와 같이 관계를 설정하면서 DB 모델을 만들어 준다. DateType은 TEXT, INTEGER 등이 있는데 라이브러리에 들어가서 확인하면 더 정확하다.

import db from '.models/index';

db.sequelize.sync()
	.then( () => {
		console.log('db 연결 성공');
	}). catch(console.log.error));

위와 같이 db를 불러와 실제 DB와 싱크를 맞춰서 DB에 연결한다.

npx squelize db:create 

위와 같은 명령어로 마이그레이션을 할 수가 있다.

import { User } from './models/index' or 
import db from './models'

app.post('/', async (req, res) => {
		await User.create(
			email : req.body.email,
			password: req.body.password	
		)
	})

위와 같은 명령어로 DB에 해당 정보를 저장할 수가 있다.

const user = await User.findOne(
	where: { email: req.body.email }
)

findOne이라는 것으로 Where를 통한 조건문으로 유저DB의 정보를 가지고 올 수 있다.

if (!user) {
	return res.send({'에러 메세지')
	}
else (user) {
	return res.send(user)
	}