Я заметил это ранее, но я думал, что это проблема интервала зацикливания, поэтому я не принимал быстрых решений, чтобы это исправить.НО сегодня я столкнулся с той же проблемой с другим методом, который использует 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