sequelize возвращая TimeoutError в findAll с помощью include - PullRequest
0 голосов
/ 26 сентября 2019

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

...