如何处理一个用户对节点表达的相同请求?

时间:2017-07-21 08:35:29

标签: node.js express

我正在使用express.recently维护节点服务器,当用户请求购买一件商品时,我有时会遇到处理用户购买的虚拟产品的问题(在客户端同时点击两次购买按钮)客户端同时没有这种行为的约束。下面的代码显示了如何重现它:

'buyItem': async (req, res, next) => {
  const itemId = req.params.itemId;
  const userId = req.headers['current-user-id'];

  const orderRecord = await Order.find(itemId, userId)//do mongodb search
  if (orderRecord && orderRecord.status === 'paid') {//second request  detect no orderRecord exists beacase first request haven't create order yet
    return res.status(400).json({
      'code': 101,
      'message': 'you have already bought it',
      'result': {}
    })
  }
  // fisrt request goes here
  const orderNew = await Order.create(itemId, userId)//do mongodb create
  await User.deduct(userId, item.price);

}

当第一个请求到来时,orderRcord不存在于db中,因此它将运行if()判断下面的代码。当第二次出现时,它仍然运行if()判断下面的代码,因为拳头请求还没有创建顺序。顺便说一句,我使用节点的集群进行多个cpus。 我该如何正确处理?谢谢你的帮助。

0 个答案:

没有答案