如何使快速服务器一次仅服务一个API请求

时间:2019-11-13 04:59:10

标签: node.js api express

我已经公开了来自节点快递服务器的一个API,并且我只希望一个请求得到服务(由于资源限制),而其他请求仅应被拒绝。无论如何要实现这一目标?

3 个答案:

答案 0 :(得分:1)

使用 express-rate-limit ,特别是如果您想对多个路由重复执行。

npm install --save express-rate-limit

const rateLimit = require("express-rate-limit");

const limiter = rateLimit({  
  windowMs: 15 * 60 * 1000, // 15 minutes
  max: 1 // limit each IP to 1 request per windowMs
});

//  apply to all requests
app.use(limiter);

// only apply to requests that begin with /api/
app.use("/api/", limiter);

// only apply to single route
app.post("/create-account", limiter , function(req, res) {
  //...
});

答案 1 :(得分:0)

使用锁定

let lock = false

router.get('/myroute', (req, res, next) => {
    if (lock) {
        req.json({err: 'server busy'})
        return
    }
    lock = true
    // process main functions
    ....
    res.json(result)
    lock = false
})

变量“锁”被共享给每个请求。如果一个请求被请求并且将lock设置为true,则随后到达的其他请求计数器锁定为true。

答案 2 :(得分:0)

只有一个NodeJS线程在Express中执行您的API处理程序。只需不要在API处理程序和此目标中使用任何异步代码

  

由于资源有限,我只希望处理一个请求

将自动实现。

  

和其他请求应该只是被拒绝

真的有必要吗?如果提出其他要求等待,则可能可以实现与资源限制有关的既定目标。