sequelize: Unhandled rejection TypeError: Cannot read property 'query' of undefined

What you are doing?

    return sequelize.transaction((tx) => {
      return Topping.destroy({where: {pizza_id: request.params.id}, transaction: tx})
        .then((res) => {
          return Pizza.destroy({
            where: {id: request.params.id},
            transaction: tx
          })
        })
    }).then((res) => reply('Pizza removed'))
      .catch((err) => reply(err)
  })

What do you expect to happen?

A Transaction!

What is actually happening?

Unhandled rejection TypeError: Cannot read property 'query' of undefined
at parameters.length.Promise (/Users/me/projects/pizza-api/node_modules/sequelize/lib/dialects/postgres/query.js:65:53)
    at Promise._execute (/Users/me/projects/pizza-api/node_modules/bluebird/js/release/debuggability.js:300:9)
    at Promise._resolveFromExecutor (/Users/me/projects/pizza-api/node_modules/bluebird/js/release/promise.js:483:18)
    at new Promise (/Users/me/projects/pizza-api/node_modules/bluebird/js/release/promise.js:79:10)
    at Query.run (/Users/me/projects/pizza-api/node_modules/sequelize/lib/dialects/postgres/query.js:65:9)
    at retry (/Users/me/projects/pizza-api/node_modules/sequelize/lib/sequelize.js:529:32)
    at /Users/me/projects/pizza-api/node_modules/retry-as-promised/index.js:40:21
    at Promise._execute (/Users/me/projects/pizza-api/node_modules/bluebird/js/release/debuggability.js:300:9)
    at Promise._resolveFromExecutor (/Users/me/projects/pizza-api/node_modules/bluebird/js/release/promise.js:483:18)
    at new Promise (/Users/me/projects/pizza-api/node_modules/bluebird/js/release/promise.js:79:10)
    at retryAsPromised (/Users/me/projects/pizza-api/node_modules/retry-as-promised/index.js:30:10)
    at Promise.try.then.connection (/Users/me/projects/pizza-api/node_modules/sequelize/lib/sequelize.js:529:14)
    at bound (domain.js:280:14)
    at runBound (domain.js:293:12)
    at tryCatcher (/Users/me/projects/pizza-api/node_modules/bluebird/js/release/util.js:16:23)
    at Promise._settlePromiseFromHandler (/Users/me/projects/pizza-api/node_modules/bluebird/js/release/promise.js:512:31)
    at Promise._settlePromise (/Users/me/projects/pizza-api/node_modules/bluebird/js/release/promise.js:569:18)
    at Promise._settlePromiseCtx (/Users/me/projects/pizza-api/node_modules/bluebird/js/release/promise.js:606:10)
    at Async._drainQueue (/Users/me/projects/pizza-api/node_modules/bluebird/js/release/async.js:138:12)
    at Async._drainQueues (/Users/me/projects/pizza-api/node_modules/bluebird/js/release/async.js:143:10)
    at Immediate.Async.drainQueues (/Users/me/projects/pizza-api/node_modules/bluebird/js/release/async.js:17:14)
    at runCallback (timers.js:666:20)

Dialect: postgres Database version: 9.4.5.0 Sequelize version: 4.4.2 Bluebird version: 3.5.0

To note I downgraded to version Sequelize version: 3.29.0, code above goes through fine as expected as a transaction

About this issue

  • Original URL
  • State: closed
  • Created 7 years ago
  • Reactions: 31
  • Comments: 34 (18 by maintainers)

Commits related to this issue

Most upvoted comments

I was able to stop getting this issue increasing the pool of connections and setting a higher value to the new acquire config.

  pool: {
    max: 15,
    min: 0,
    idle: 10000,
    acquire: 10000
  }

Still seeing this error for other cases. I filed https://github.com/sequelize/sequelize/issues/9218 to track.

My team was getting this error, but it was due to our own misuse – we accidentally nested a transaction inside an object.

Here’s a sample:

// BAD
sequelize.transaction(async (transaction) => {
  models.File.create(fileInfo, {transaction: {transaction}});
}

Note that the transaction is inside an unnecessary object. It should look like this:

// GOOD
sequelize.transaction(async (transaction) => {
  models.File.create(fileInfo, {transaction: transaction});
}
// GOOD
sequelize.transaction(async (transaction) => {
  models.File.create(fileInfo, {transaction: transaction});
}

Work well for me. Thanks man.