【问题标题】:How to connect to multiple databases through Sequelize?如何通过 Sequelize 连接多个数据库?
【发布时间】:2019-08-14 23:06:08
【问题描述】:

我需要根据 Express 路由连接到不同的数据库。

例如:

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',
  }
}

【问题讨论】:

  • 如果你觉得足够了,你能标记答案吗

标签: javascript node.js sequelize.js node-modules sequelize-cli


【解决方案1】:

使用不同的数据库设置运行该代码两次,并保留两组 sequelize 连接对象和模型数组。

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];

【讨论】:

    【解决方案2】:

    也许这不是正确的答案,但我使用它并且它有效。

    我通常将它用于数据库,第二个用于图像

    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})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-17
      • 2012-01-08
      • 1970-01-01
      • 1970-01-01
      • 2016-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多