[英]Sequelize: Connect multiple databases with the same schema
親愛的。
我的業務邏輯解釋起來非常復雜,但總的來說我可以這樣描述:我有一個中央數據庫,我在其中保存全局配置,並且有大約。 22 個數據庫以相同的模式在我的國家/地區交付。 按照 Sequelize 文檔,我在 app.js 中創建了這樣的配置:
global.dbCentral = new Sequelize('mysql://dir:password@localhost:port/dbCentral', {
dialect: 'mysql',
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000
},
operatorsAliases: false
, timezone: '-03:00' //for writing to database
});
global.dbSala = new Sequelize('mysql://dir:password@localhost:port/defaultDb', {
dialect: 'mysql',
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000
},
operatorsAliases: false
, timezone: '-03:00' //for writing to database
});
有了中央連接,我沒問題。 即我創建了一個 model 這樣的:
const Sequelize = require('sequelize');
const Promocion = dbCentral.define('promocion', {
id: {
type: Sequelize.INTEGER(10).UNSIGNED,
allowNull: false,
primaryKey: true,
autoIncrement: true
},
titulo: {
type: Sequelize.TEXT,
allowNull: true
},
descripcion: {
type: Sequelize.TEXT,
allowNull: true
},
monto: {
type: Sequelize.FLOAT,
allowNull: true
},
img: {
type: Sequelize.STRING(45),
allowNull: true
},
activa: {
type: Sequelize.BOOLEAN,
allowNull: true
},
fecha_inicio: {
type: Sequelize.DATE,
allowNull: true
},
fecha_fin: {
type: Sequelize.DATE,
allowNull: true
}
}, {
tableName: 'promocion',
timestamps: false
});
Promocion.hasMany(PromocionUsuarioCruciclub, { as: 'promocion_usuario_cruciclub', foreignKey: 'id', targetKey: 'id_promocion' });
module.exports = Promocion;
但我不知道如何設置使用不斷變化的連接的模型。 如果我為每個 sala 創建一個 dbSala(dbSala1、dbSala2...等),我需要重復每個 model 文件,這是不可能管理的。
我認為答案就在這里: Sequelize: Using Multiple Databases但它對我的情況不起作用。
我正在使用 sequelize 4.43.0
請告訴我你是否需要更好地解釋
謝謝!
您應該在每個創建的 sequelize 實例(即每個連接)中注冊所有 model 定義。 將您的模型定義為具有 sequelize 實例作為參數並返回已注冊的 model 定義的函數。 像這樣的東西:
module.exports = (sequelize, DataTypes) => {
const action = sequelize.define('action', {
id: {
type: DataTypes.UUID,
allowNull: false,
primaryKey: true
},
// <here some other fields>
},
{
schema: 'public',
tableName: 'action'
})
action.associate = (models) => {
action.belongsTo(models.resource, { foreignKey: 'resourceId' })
}
return action
}
然后使用這些函數在每個 sequelize 實例中注冊模型。
我成功地使用了交易。 我有一個主數據庫,我為其創建了模型。 然后,為了使用相同的模型,但對於具有相同結構的其他數據庫,我簡單地創建了一個基於連接到另一個數據庫的不同 Sequelize 實例的事務,並將該事務作為選項參數的一部分傳遞給模型方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.