如何在 Sequelize 中设置查询超时?

Bbb*_*bob 9 mysql timeout node.js sequelize.js

我想看看如何在 Sequelize 中设置查询的超时时间。

我已经查看了 Sequelize 文档以获取一些信息,但我无法完全找到我正在寻找的内容。我发现的最接近的是“pools.acquire”选项,但我不想设置传入连接的超时,而是设置正在进行的查询的超时,以便我可以快速短路死锁。

http://docs.sequelizejs.com/class/lib/sequelize.js~Sequelize.html

这是我的示例代码:

const db = new Sequelize( database, username, password, {
  host   : hostname,
  dialect: "mysql",
  define : {},
  pool: {
    max : 10,
    min : 0,
    idle: 10000
  },
})
Run Code Online (Sandbox Code Playgroud)

任何见解将不胜感激!

WIT*_*ITO 9

添加 dialectOptions

  const db2 = new Sequelize(database, username, password, {
    host: hostname,
    dialect: "mysql",
    define: {},
    dialectOptions: {
      options: {
        requestTimeout: 3000
      }
    },
    pool: {
      max: 10,
      min: 0,
      idle: 10000
    },
  });
Run Code Online (Sandbox Code Playgroud)

  • 警告,该答案在 Sequelize v5 中不再有效,mysql2 不再采用该选项。必须在查询级别处理超时。如果保留该选项,将显示一条警告消息,如下所示“忽略传递给连接的无效配置选项:选项”。目前这是一个警告,但在 MySQL2 的未来版本中,如果将无效的配置选项传递给 Connection`,将会抛出错误 (3认同)

Apo*_*ani 5

如果有人偶然在这里寻找 Postgres 特定的查询超时配置,它在 sequelize v5 中看起来像这样:

dialectOptions: {
  statement_timeout: 1000,
  idle_in_transaction_session_timeout: 5000
}
Run Code Online (Sandbox Code Playgroud)

这会将 statement_timeout 设置为 1s,将 idle_in_transaction_session_timeout 设置为 5s。参考 https://github.com/sequelize/sequelize/blob/master/src/dialects/postgres/connection-manager.js


Vit*_*ddy 5

对于 Sequelize v6 和 mysql2 驱动程序,以下代码有效,

export const database = new Sequelize(
    Config.get('DB.NAME'),
    Config.get('DB.USER'),
    Config.get('DB.PASS'),
    {
        host: Config.get('DB.HOST'),
        port: 3306,
        dialect: 'mysql',
        dialectOptions: { connectTimeout: isDevEnv ? 15000 : 5000 }
    });
    
Run Code Online (Sandbox Code Playgroud)