【问题标题】:Sequelize Connection pool reading wrong databaseSequelize连接池读取错误的数据库
【发布时间】:2022-07-07 22:26:54
【问题描述】:

我正在尝试使用 sequelize 连接池选项

这是我正在尝试的documentation link

    const { Sequelize } = require('sequelize');

const sequelize = new Sequelize(null, null, null, {
  dialect: 'mysql',
  port: 3306,
  replication: {
    read: [
      { host: 'localhost', username: 'root', password: 'password', database: 'test' },
    ],
    write: { host: 'localhost', username: 'root', password: 'password', database: 'test1' },
  }
});

module.exports.sequelize = sequelize;

这里的预期行为应该是,所有读取调用都应该从“读取”选项进行,所有写入操作都应该在“写入”选项上完成,即。 从“test”数据库读取并写入“test1”

这是我正在测试的示例路线,

app.get('/',async function(req,res){
    const [ readRes ] = await sequelize.query("select * from users");
    const writeRes = await sequelize.query("insert into users(name,status) values('user11',1)");
    const [readRes1 ] = await sequelize.query("select * from users");
    res.send([
        { response1 : readRes }
    ]);
});

在上面的示例中,readRes 和 readRes1 的输出始终来自“test1”数据库,即写入数据库。

事实上,写操作按预期工作,但读操作总是从“write”数据库而不是“readdb”读取

如果我将 test1 数据库换成读取数据库并将测试数据库换成写入数据库,那么所有读取操作也会发生在读取数据库上。

知道我错过了什么吗?

【问题讨论】:

    标签: mysql node.js database sequelize.js


    【解决方案1】:

    所以,事实证明这是一个非常愚蠢的错误。我没有将查询类型参数传递给查询。

    在thread 上读了一点之后,它点击了我!

    所以代码应该是这样的。

    app.get('/',async function(req,res){
        const [ readRes ] = await sequelize.query("select * from users",{ type: Sequelize.QueryTypes.SELECT });
        const writeRes = await sequelize.query("insert into users(name,status) values('user11',1)");
        const [readRes1 ] = await sequelize.query("select * from users",{ type: Sequelize.QueryTypes.SELECT });
        res.send([
            { response1 : readRes }
        ]);
    });
    

    注意 { type: Sequelize.QueryTypes.SELECT } 您需要明确说明您的查询类型。我的假设是基于 lib 可以找出的操作类型(插入/更新/选择)并设置适当的类型。

    他们应该在文档中突出显示它,就像他们为其他选项所做的那样。

    每次 write 或 useMaster: true 查询都会使用写入池。对于选择 将使用读取池。使用基本轮次切换只读副本 循环调度。

    【讨论】:

      猜你喜欢
      • 2014-09-14
      • 2019-04-13
      • 2017-01-20
      • 2018-11-30
      • 2015-04-08
      • 1970-01-01
      • 2020-11-12
      • 2011-05-28
      • 1970-01-01
      相关资源
      最近更新 更多