Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Sequelize:使用同一架构连接多个数据库_Javascript_Node.js_Database_Sequelize.js - Fatal编程技术网

Javascript Sequelize:使用同一架构连接多个数据库

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:

亲爱的

我的业务逻辑很难解释,但通常我可以这样描述:我有一个中央数据库,保存全局配置,在我的国家有大约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
});
对于中央连接,我没有问题。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连接中注册所有模型定义。是的,我注册了。好的,我会尝试你解释和告诉你结果的方式。非常感谢你!