【问题标题】:Distinguish knex client from knex transaction区分 knex 客户端和 knex 事务
【发布时间】:2020-08-28 07:40:29
【问题描述】:

基于 Knex 承诺的事务可以像常规 knex 客户端一样使用。

const db = knex.transaction() //or just const db = require('knex')(knexOptions)
db('books').insert(books);    // it works in both case

我需要接受 knex 对象作为我函数的参数并在其中执行事务。如果 knex 对象或 knex 事务作为参数传递,我能以某种方式区分吗?如果这不是一个事务,我想用 knex.transaction 包装客户端对象。

我可以使用类似db.isTransaction 的语法吗?

function myFunc(db) {
if (!db.isTransaction)
  {
    db=knex.transaction()
  }
db('books').insert(books); 
}

【问题讨论】:

    标签: orm knex.js


    【解决方案1】:

    使用 knex.isTransaction 属性来判断对象是 knex 事务还是客户端。

    function myFunction(db) {
      if (db.isTransaction) {
        console.log('Inside transaction')
        return db.from('table_1').select()
      } else {
        console.log('Wrapping client in a transaction')
        return db.transaction(trx => myFunction(trx))
      }
    }
    

    在这两种情况下,您的查询都应该在事务中执行

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多