Express.js可以在帖子上有竞争条件

Pau*_*bra 5 race-condition node.js express

节点noob问题在这里我很确定.

我在一个简单的快速JS应用程序中有以下代码

var randomPin = require('./api/randomPin');
var currentPin = "pin";
app.post('/match', function(req, res) { 
    if (req.body.pin && req.body.pin == currentPin) {
            //it should only be possible for one person to get here
            //and receive this hurrah
        currentPin = randomPin.generate();
        res.send({hurrah:true});
    }

    res.send({hurrah:false});
});
Run Code Online (Sandbox Code Playgroud)

我仍然没有理解Node请求的工作流程......

是否有可能出现竞争条件,其中两个帖子请求/match同时被处理,以便两个帖子都试图呼叫randomPin.generate()

如果是这样,有一个避免这种情况的"最佳方式"?

Tom*_*Tom 7

如果有两个POST /match请求,则第二个请求将等待第一个请求完成.但是,如果您的帖子处理程序更新任何全局变量或对象(例如缓存),则该更改将对其他请求可见.

在你的情况下randomPin.generate()不会出现竞争条件问题,因为在Node.js中没有同时执行这样的事情.

您可以在此处阅读更多内容:Node.js中的单线程和事件循环