Как подключиться к нескольким базам данных через Sequelize?

Мне нужно подключиться к разным базам данных в зависимости от экспресс-маршрута.

Например:

example.com/oneapp Этот маршрут должен иметь доступ к базе данных oneapp.

example.com/secondapp Этот маршрут должен иметь доступ к базе данных с именем secondapp

У меня есть эти настройки в моем Sequelize

index.js:

const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const config = require('../../config/database.js');

const db = {};
const sequelize = new Sequelize(config.producao);

fs
  .readdirSync(__dirname)
  .filter(file => (file.indexOf('.') !== 0) && (file !== path.basename(__filename)) && (file.slice(-3) === '.js'))
  .forEach((file) => {
    const model = sequelize.import(path.join(__dirname, file));
    db[model.name] = model;
  });


  console.log(db)

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

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

module.exports = db;

база данных.js

module.exports = {
  "producao": {
    username: 'sa',
  password: 'mypass',
  database: 'PRODUCAO',
  host: 'SVRNAZ002',
  dialect: 'mssql',
  }
}

person Caique Ribeiro de Oliveira    schedule 14.08.2019    source источник
comment
можете ли вы отметить ответ, если вы найдете достаточно   -  person tommybananas    schedule 19.02.2020


Ответы (2)


Запустите этот код дважды с разными настройками БД и сохраните два набора объекта подключения к продолжению и массив моделей.

const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const configs = [require('../../config/database.js'), require('../../config/database2.js')];

module.exports = configs.map(config => {

  const db = {};
  const sequelize = new Sequelize(config.producao);

  // load stuff like normal

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

  return db;

});

Теперь вы можете получить доступ к обоим:

const models = require('index');

const firstdb = models[0];
const seconddb = models[1];
person tommybananas    schedule 15.08.2019

возможно, это не правильный ответ, но я использую его, и он работает.

первый обычно использую для баз данных, второй для изображений

db.js

const {Sequelize} = require('sequelize')
const config = [
    {
        dialect: 'sqlite',
        storage: './db.sqlite'
    },
    {
        dialect: 'sqlite',
        storage: './db_gambar.sqlite'
    }
]

const database = config.map( x => new Sequelize(x));
module.exports = { database }

./models/akun.js

const { DataTypes, Model } = require('sequelize');
const { database} = require('./../db');
const sequelize = database[0];


// Tambahan is extend Model
class Akun extends Tambahan{}
Akun.init({
    name: {
        type: DataTypes.STRING,
        allowNull: false
    },
    email: {
        type: DataTypes.STRING,
        allowNull: false,
        unique: true
    },
    password: {
        type: DataTypes.STRING,
        allowNull: false,
    }
},{ sequelize, underscored: true})

./models/gambar.js

const { DataTypes, Model } = require('sequelize');
const {  database } = require('./../db');
const sequelize = database[1];

// Tambahan is extend Model
class Gambar extends Tambahan{}

Gambar.init({
    name: {
        type: DataTypes,
        allowNull: false
    },
    user_id: {
        type:DataTypes.INTEGER,
        allowNull: false
    },
    data: {
        type:DataTypes.BLOB,
        allowNull: false
    },
    thumbnail: {
        type: DataTypes.BLOB,
        allowNull: false
    }
},{ sequelize , underscored: true})
person malik kurosaki    schedule 03.01.2021