NodeJS SequlizeJS连接经常超时

vohkndzv  于 2022-12-03  发布在  Node.js
关注(0)|答案(3)|浏览(185)

我们在NodeJS/expressJS/SequilizeJS上运行了一个项目后端作为RESTapi。该RESTapi连接到VueJSSPA。
只有5个人使用这个系统,大部分操作都是交易。
出现错误
序列化连接获取超时错误:操作超时
这是我们的配置对象。

const sequelize = new Sequelize(
  config.database,
  config.username,
  config.password,
  {
    host: config.host,
    dialect: "mysql",
    pool: {
      max: 20,
      min: 0,
      acquire: 30000,
      idle: 10000
    }
  }
);

我们确信服务器的内存不是问题所在,因为只使用了5%。
这个错误从何而来?

rt4zxlrg

rt4zxlrg1#

将acquire更改为60000,它将解析,否则您需要重新检查该特定查询的来源。acquire:60000

vnjpjtjt

vnjpjtjt2#

在您的代码中,必须有一个处于挂起状态的已打开事务。

const registerUser = async (payload) => {
    try {
        const t = await Sequelize.transaction() // open a transaction
        if (!payload.name) {
          return {error: 'name is required'} // Notice this function ends here but the opened transaction was not committed or rolled-back thereby leaving the transaction hanging
        }
        User.create({name: payload.name, email: payload.email}, {transaction: t})
        Credentials.create({password: payload.password, username: payload.username}, {transaction: t})
        await t.commit() // At this point, all validations were passed and the data was successfully added to the two tables hence the transaction is committed
        return {message: "User successfully created"}
    } catch (error) {
      await t.rollback() // Some error occurred and the transaction was rolled back
      return {error: 'An error occurred when trying to create a user'}
    }
}

因此,无论何时在函数中打开事务,都需要提交或回滚该事务。因此,在上面的函数中,当用户调用有效负载中没有名称的函数时,将输入if语句,该语句将返回错误,而实际上不会提交或回滚事务

but5z9lq

but5z9lq3#

可能是您正在使用交易在您的查询如果是使用异步等待而不是然后然后功能可能是将解决如果解决请在此帖子回复

相关问题