top of page

sequelize를 사용해서 multi database 사용하기

  • 작성자 사진: tervancovan
    tervancovan
  • 2020년 4월 20일
  • 2분 분량

요새는 admin.4cut.ai를 개발하고있다.


처음에는 툰을 대신 그려줍니다. 컨셉이 였다가.


이제는 또다른 형태로 변해 간다.



같은 탬플릿 많은 세미 포토샵?


여하튼 최근 미션은


1.로그인 후 이미지 업로드

2.로그인 후 이미 업로드한 이미지가 있다면 내려주기


현재 디비는 mariadb 를 사용하고 있다.


sql문을 너무 쓰기 싫어하는 스타일이라 sequelize 를 사용했다 문제는


기존에 사용하는 postgres db를 sequelize와 연결해서 사용하고있던 터라


멀티로 사용해야 하는 문제가 생겼다.



세팅해야될 것이 한 4가지 정도 되었다.


1. 멀티 config.json

mariadb.json 의 예시 처럼 psqldb도 만들어주었다.

{
  "stage": {
    "username": "아이디",
    "password": "비밀번호",
    "database": "디비이름",
    "host": "mariadb stage 주소",
    "dialect": "mariadb",
    "operatorsAliases": false
  },
    "development": {
    "username": "아이디",
    "password": "비밀번호",
    "database": "디비이름",
    "host": "mariadb development 주소",
    "dialect": "mariadb",
    "operatorsAliases": false
  },
  "production": {
    "username": "아이디",
    "password": "비밀번호",
    "database": "디비이름",
    "host": "mariad production 주소",
    "dialect": "mariadb",
    "operatorsAliases": false
  }
}

2.멀티 models

3.sequelize-cli를 위한 멀티 env

4.sequelize index.js 수정


'use strict';

const fs = require('fs');
const debug = require('debug')('sequelize:index');
const path = require('path');
const Sequelize = require('sequelize');
const basename = path.basename(__filename);
const env = process.env.NODE_ENV || 'development';
const config_dirs = fs.readdirSync(__dirname+'/../config');
let configs = []
const db = {};
config_dirs.forEach(dir=>{
    configs.push(require(__dirname + '/../config/'+dir+'/config.json')[env]);
})
debug(configs);

configs.forEach((config)=>{
    db[config.dialect] = new Sequelize(config.database, config.username, config.password, {...config, logging:(...msg)=> debug(msg)});
})

/**Add the Database Models**/
//Add models from database1 folder
fs
    .readdirSync(__dirname + '/psqldb')
    .filter(file => {
        return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
    })
    .forEach(file => {
        const model = db.postgres.import(path.join(__dirname + '/psqldb', file));
        db[model.name] = model;
    });
fs
    .readdirSync(__dirname + '/mariadb')
    .filter(file => {
        return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
    })
    .forEach(file => {
        const model = db.mariadb.import(path.join(__dirname + '/mariadb', file));
        db[model.name] = model;
    });


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

db.Sequelize = Sequelize;

module.exports = db;


express의 app.js안에서 마리아 디비 authenticate()를 시도해 보았다


db.mariadb
    .authenticate()
    .then(() => {
        debug('maraidb Connection has been established successfully.');
    })
    .catch(err => {
        debug('mariadb Unable to connect to the database: %O', err);
    });


성공~!

 
 
 

최근 게시물

전체 보기
아빠의 엄마일일 체험기

나의 욕심이었을까? 아이들과 아내만 혼자 두고 제주에 두고 2년의 시간이 흘렀다. 이번 주는 이틀 동안 아내의 빈자리를 혼자 오롯이 채워보았다. 아내 친구들과의 즐거운 계모임 지원을 위한 결정이었다. 아침부터 아내의 자리는 크게만 느껴졌다. ...

 
 
 

Comments


bottom of page