同时击中端点几次可能会导致问题?

时间:2018-01-16 17:01:49

标签: mongodb express mongoose

让我们假设您的app(伪)中有这样的端点:

app.get('/user/withdrawmoney',(req,res)=>{
 DB.find(req.session.id,(user)=>{
  if(user.balance < 0){
     DB.update()...//Update the balance
    ...//Send user money
   }
 })

})

如果&#34;计时&#34;用户不可能退出多次。即使他没有平衡也是对的?

1 个答案:

答案 0 :(得分:1)

是的,这是可能的。当您尝试更新用户的余额时,可能会出现竞争情况。以下是竞争条件示例:race condition (wikipedia)

解决竞争条件问题的一种方法是创建一个&#34;交易&#34;在mongodb。这将锁定您的模型,直到您的代码完成更新数据库。 您可以在此处查看示例:MongoDB Cookbook example