我之前已经注意到了这一点,但是我认为这是循环间隔的问题,因此我没有采取任何快速解决方案来解决它。但是今天,我遇到了使用findAll
和include
的另一种方法遇到的相同问题。
经过一些研究,我对连接模块进行了很多设置,以减少发生超时错误的机会。
let sequelize = new Sequelize(database.database,
database.username,
database.password, {
host: database.host,
dialect: database.dialect, // mysql
define: database.define,
pool: database.pool, // {max: 5, min: 0, acquire: 30000, idle: 10000, evict: 1000}
operatorsAliases: database.operatorsAliases, // false
logging: database.logging,
reconnect: {
max_retries: 999,
onRetry: count => {
console.log(`connection lost, trying to reconnect ${count}`)
}
},
retry: {
match: [
/SequelizeConnectionError/,
/SequelizeConnectionRefusedError/,
/SequelizeHostNotFoundError/,
/SequelizeHostNotReachableError/,
/SequelizeInvalidConnectionError/,
/SequelizeConnectionTimedOutError/
],
name: 'query',
backoffBase: 100,
backoffExponent: 1.1,
timeout: 2500,
max: Infinity
}
})
但是即使使用这些设置,我仍然看到超时错误。
我的关联模型:
db.Conversation.hasMany(db.ConversationUser, {
foreignKey: 'conversation'
})
发生错误的方法:
let conversationsList = await Conversation.findAll({
attributes: ['id', 'title', 'ConversationUsers.participant_phone'],
where: { active: true, title },
include: [{
model: ConversationUser,
as: 'ConversationUsers',
required: true,
attributes: []
}],
raw: true,
})
问题是我经常调用此方法,但它每3-4个请求才会中断。我收到的实际消息是:
node:3457) UnhandledPromiseRejectionWarning: TimeoutError: query timed out