sequelize 连接多个数据库生成多个实例

日期: 2019-03-22         浏览量: 4022

seuqelize 连接多个库,生成多个实例。


1. 配置config.json


    

{
    "db1":{
        "database":"db1",
        "user":"root",
        "password":"123456",
        "host":"123.56.12.1",
        "port":"3306"
    },
    "db2":{
        "database":"db2",
        "user":"root",
        "password":"123456",
        "host":"123.56.12.2",
        "port":"3306"
    }
}



2. 读取配置文件,连接数据库,生成数据库实例。 创建mysql.js文件


    

const Sequelize = require('sequelize');
const config = require('../../configs');   //配置文件 数据对象
//连接数据库  配置多库,多个sequelize实例
const createMysql = (config) => {
    let db = {};
    for (let i in config) {
        db[i] = new Sequelize(config[i].database, config[i].user, config[i].password, {
            dialect: 'mysql',
            host: config[i].host,
            port: config[i].port,
            pool: {
                max: 5,
                min: 0,
                acquire: 30000,
                idle: 10000
            },
            timezone: '+08:00'
        })
    }
    return db;
}

module.exports = createMysql(config.mysql);



3. 建立数据模型 (请看上一篇文章),建立实例及模型关系。创建 model.js文件


    

const sequelize = require('./mysql');      //建立连接的数据库实例 db
const DataTypes = require('sequelize'); 
const config = require('../../configs');    //配置文件
/***
 * 支持多库
 * model 表名 必传
 * db 库名 默认配置文件的第一个库名
 */
module.exports = (model, db=false)=>{
    try{
        //默认读取配置文件第一个库
        if(!db){
            let mysqlKeys = Object.keys(config.mysql);
            db = mysqlKeys[0];
        }
        let modelFile = require(`./models/${db}/${model}`);
        let modelData = modelFile(sequelize[db], DataTypes)
        return new Base(modelData);
    }catch(err){
        console.log(`数据库错误:${err}`)
    }
}



4.调用方法


const userDa  = require('../../lib/model')('user', 'db1'); // 表名  库名