续集在findAll上包含include返回TimeoutError

时间:2019-09-26 09:27:06

标签: javascript mysql node.js sequelize.js relation

我之前已经注意到了这一点,但是我认为这是循环间隔的问题,因此我没有采取任何快速解决方案来解决它。但是今天,我遇到了使用findAllinclude的另一种方法遇到的相同问题。

经过一些研究,我对连接模块进行了很多设置,以减少发生超时错误的机会。

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

0 个答案:

没有答案