21xrx.com
2024-12-22 21:55:59 Sunday
登录
文章检索 我的文章 写文章
Node.js限制访问频率的实现方法
2023-07-03 01:06:38 深夜i     --     --
Node js 限制访问频率 实现方法

在Node.js中,有时候需要对接口或路由进行访问频率的限制,以保证服务器的稳定性和安全性。那么,我们该如何实现访问频率的限制呢?下面介绍两种常用的方法。

一、使用中间件

在Node.js中,我们可以使用中间件来实现访问频率的限制。我们可以使用一个计数器来记录某个接口或路由的访问次数,当达到一定次数时,就拒绝之后的访问。

下面是使用中间件实现访问频率限制的示例代码:


const express = require('express');

const app = express();

// 定义一个计数器

const rateLimit = {};

// 中间件实现访问频率限制

const rateLimiter = (req, res, next) => {

 const { path } = req;

 rateLimit[path] = rateLimit[path] || 0;

 if (rateLimit[path] >= 10) {

  return res.status(429).send('Too Many Requests');

 }

 rateLimit[path]++;

 setTimeout(() => {

  rateLimit[path]--;

 }, 1000 * 60 * 60); // 1小时内最多访问10次

 next();

}

// 使用中间件

app.use(rateLimiter)

// 定义一个接口

app.get('/', (req, res) => {

 res.send('Hello World!');

});

// 启动服务器

app.listen(3000, () => {

 console.log('Server started!');

});

上面的代码中,我们定义了一个计数器`rateLimit`,然后通过中间件`rateLimiter`来实现访问频率限制。在`rateLimiter`中,我们先获取当前访问的路由,然后判断该路由在1小时内的访问次数是否超过了10次,如果超过了就返回429状态码。如果没有超过,则将该路由的访问次数加1,并设置一个定时器,在1小时后将访问次数减1。

二、使用第三方包

除了使用中间件,还可以使用一些第三方包来实现访问频率的限制。例如`express-rate-limit`就是一个使用比较广泛的限制访问频率的包。

下面是使用`express-rate-limit`实现访问频率限制的示例代码:


const express = require('express');

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

const app = express();

// 定义一个限制访问频率的中间件

const limiter = rateLimit({

 windowMs: 60 * 60 * 1000, // 1小时

 max: 10 // 1小时最多访问10次

});

// 使用中间件

app.use(limiter)

// 定义一个接口

app.get('/', (req, res) => {

 res.send('Hello World!');

});

// 启动服务器

app.listen(3000, () => {

 console.log('Server started!');

});

上面的代码中,我们使用`express-rate-limit`定义了一个中间件`limiter`,设置了1小时内最多访问10次,然后通过`app.use()`将该中间件应用到路由上。

总结

无论是使用中间件还是第三方包,限制访问频率的实现都比较简单。在开发过程中,根据实际情况选择合适的方法即可。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复