我希望了解如何在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
},
})
任何见识将不胜感激!
答案 0 :(得分:5)
如果有人在这里偶然发现用于查询超时的Postgres特定配置,则在sequelize v5中看起来像这样:
dialectOptions: {
statement_timeout: 1000,
idle_in_transaction_session_timeout: 5000
}
这会将statement_timeout设置为1s,idle_in_transaction_session_timeout设置为5s。 参考https://github.com/sequelize/sequelize/blob/master/src/dialects/postgres/connection-manager.js
答案 1 :(得分:2)
添加dialectOptions
const db2 = new Sequelize(database, username, password, {
host: hostname,
dialect: "mysql",
define: {},
dialectOptions: {
options: {
requestTimeout: 3000
}
},
pool: {
max: 10,
min: 0,
idle: 10000
},
});
答案 2 :(得分:1)
对于 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 }
});
答案 3 :(得分:0)
就我而言,它可以将requestTimeout字段直接添加到DialectOptions对象中:
const db2 = new Sequelize(database, username, password, {
host: hostname,
dialect: "mysql",
define: {},
dialectOptions: {
requestTimeout: 3000
},
pool: {
max: 10,
min: 0,
idle: 10000
}
});
后续版本:^ 4.42.0
答案 4 :(得分:0)
打开本地文件node_modules/_mysql@2.17.1@mysql/lib/ConnectionConfig.js
更改this.connectTimeout
的默认值,如下所示:
this.connectTimeout = (options.connectTimeout === undefined)
? (10 * 10000)
: options.connectTimeout;
答案 5 :(得分:0)
我遇到了同样的问题,但我使用的是 http://localhost:8888 作为我的端口,直到我将端口更改为我的 MySQL 端口 8889,除了最后一个数字外,它看起来是一样的,而且我没有付出太多注意区别,在使用 MAMP 时,您需要检查显示您的 MySQL 服务器详细信息的网页和主机。