防止快速多请求表达nodejs

时间:2018-04-08 15:03:48

标签: javascript node.js express mongoose

我有使用express.js,node.js和mongoose计算瓶子的项目。 (减少和增加)

我的服务器

app.post("/give",function(req,res){
Bottle.findById({type: "coca"}, function (err, data) {
    if(data.amount <= 0) return res.json({message: "Not enough coca"});
    data.amount -= 1;
    data.save();
    return res.json({message: "Give success"});
})
}

我编辑了我的数据库 amount = 1

然后我快速向http发出请求(循环10)

所以我的服务器接受5,不接受5,并且在我的数据库 amount = -5 因为它返回 if(data.amount <= 0) return res.json({message: "Not enough coca"});

我希望nerver得到吼叫0 我该怎么办?谢谢。

抱歉,我的英文不好

修改

我必须尝试在console.log('hello word');之前添加data.amount -= 1;,然后记录 6次!为什么???

修改

问题解决于this link

致电返回res.json({message:“Give success”});将在data.save();完成之前完成。

app.post("/give",async(req,res)=>{
    const bottle = await Bottle.findById({type: "coca"}).exec;
    if(bottle.amount <= 0) return res.json({message: "Not enough coca"});
    bottle.amount -= 1;
    await bottle.save();
    res.json({message: "Give success"}); 
}

0 个答案:

没有答案