mongo-txnodejs 的 mongodb 事务处理包

联合创作 · 2023-09-30 19:56

一个灵活可扩展的 nodejs 的 mongodb 事务处理包,支持出错回滚,事务锁,单文档级锁,ODM 无关。

import mongoTx from 'mongo-tx'
import createMongoModel from 'mongo-tx/lib/implements/create-mongo-model'
import createMongoLock from 'mongo-tx/lib/implements/create-mongo-lock'

const runTx = mongoTx({
  createModel: createMongoModel({ db: nativeDb }),
  createLock: createMongoLock({ db: nativeDb, wait: true }), // wait is true: wait until current release is release instead of throw an error
})

await runTx('some_transfer', async tx => {
  const TxAccounts = tx.wrap('accounts')
  const acc1 = await TxAccounts.findOne({name: 'u1'})
  const acc2 = await TxAccounts.findOne({name: 'u2'})
  await TxAccounts.findOneAndUpdate({
    name: 'u1',
  }, {
    $set: {
      money: acc1.money - 100,
    },
  })
  throw new Error('Some error cause auto rollback!')
  await TxAccounts.findOneAndUpdate({
    name: 'u2',
  }, {
    $set: {
      money: acc2.money + 100,
    },
  })
})
浏览 5
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报