Piy*_*cha 5 node.js sequelize.js
描述:
我在db中有一个表说Table1.只有一列AppNo(numeric),只有一行,当前值是0
我在node.js使用SequelizeORM命名时创建了API UpdateAppNo.
每当UpdateAppNoapi调用值AppNo应该增加1.
我想要的是:
如果同时发出2个或更多同时请求,则当前请求应等到上一个请求完成.
现在发生了什么:
如果先前的请求正在进行中,则当前请求将引发错误.
And*_*son 20
这是旧的,但也是谷歌的第一个点击,所以我发布这个以防其他人在这里绊倒。
正如蔡斯所说,这根本没有很好的记录。这里有一些代码可以做你想做的事情......
const User = db.User
const t = await sequelize.transaction(async(t) => {
const user = await User.findByPk(userId, {lock: true, transaction: t})
user.fieldToIncrement++
await user.save({transaction:t})
})Run Code Online (Sandbox Code Playgroud)
关键点:
此代码示例使用 Sequelize 提供的“托管”事务,因此您不需要手动管理提交/回滚,但同样适用于非托管事务
您需要提供锁定选项以及事务,否则事务会在没有您正在寻找的锁定的情况下发生。在锁定时更新表行的请求将被阻止,直到锁被释放。
不要忘记将事务对象包含在事务上下文内任何数据库操作的选项中(请参阅对 user.save() 的调用),否则您的事务将自行停止...
我希望这对某人有帮助!