Javascript Sequelize:使用同一架构连接多个数据库
亲爱的 我的业务逻辑很难解释,但通常我可以这样描述:我有一个中央数据库,保存全局配置,在我的国家有大约22个数据库使用相同的模式交付。根据Sequelize文档,我在app.js上创建了如下配置:Javascript Sequelize:使用同一架构连接多个数据库,javascript,node.js,database,sequelize.js,Javascript,Node.js,Database,Sequelize.js,亲爱的 我的业务逻辑很难解释,但通常我可以这样描述:我有一个中央数据库,保存全局配置,在我的国家有大约22个数据库使用相同的模式交付。根据Sequelize文档,我在app.js上创建了如下配置: global.dbCentral = new Sequelize('mysql://dir:password@localhost:port/dbCentral', { dialect: 'mysql', pool: { max: 5, min: 0, acquire:
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
});
对于中央连接,我没有问题。i、 e.我创建了这样一个模型:
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;
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
}
但我不知道如何设置使用不断变化的连接的模型。如果我为我拥有的每个sala(dbSala1、dbSala2…等等)创建一个dbSala,我需要重复每个模型文件,这是不可能管理的
我以为答案就在这里:但这对我的案子不起作用
我正在使用sequelize 4.43.0
如果你需要更好的解释,请告诉我
谢谢 您应该在每个创建的sequelize实例(即每个连接)中注册所有模型定义。将模型定义为将sequelize实例作为参数的函数,并返回注册的模型定义。 大概是这样的:
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;
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
}
module.exports=(续集,数据类型)=>{
const action=sequelize.define('action'{
身份证:{
类型:DataTypes.UUID,
allowNull:错,
primaryKey:对
},
//
},
{
架构:“公共”,
表名:“操作”
})
action.associate=(模型)=>{
action.belongsTo(models.resource,{foreignKey:'resourceId'})
}
返回动作
}
然后使用这些函数在每个sequelize实例中注册模型。我会检查一下。谢谢你@AdeelNawaz,这不起作用,因为这和我刚才说的一样。他为每个数据库创建了一个模型,所以我必须创建22个以上的equals模型,我尽量不这样做。使用“connectionManager.config”,我可以“在运行时”更改我的db源代码,但问题是,如果其他人正在使用该连接,我会将其踢出。你找到解决方案了吗?不,我没有。最后,我们采取其他方法来解决问题,但与此完全不同,太棒了!我会试试看,告诉你是否有效。谢谢所以你说如果我有22个挤压实例(因为我有22个db连接),我必须创建22个“用户”模型,例如?你同时连接到这22个db吗?如果是这样,您应该在所有22个sequelize连接中注册所有模型定义。是的,我注册了。好的,我会尝试你解释和告诉你结果的方式。非常感谢你!