我已经公开了来自节点快递服务器的一个API,并且我只希望一个请求得到服务(由于资源限制),而其他请求仅应被拒绝。无论如何要实现这一目标?
答案 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处理程序和此目标中使用任何异步代码
由于资源有限,我只希望处理一个请求
将自动实现。
和其他请求应该只是被拒绝
真的有必要吗?如果提出其他要求等待,则可能可以实现与资源限制有关的既定目标。