项目地址 https://github.com/vilic/rateman
import ms from 'ms';
import {RateLimiter, RateLimitExceededError} from 'rateman';
const rateLimiter = new RateLimiter({
name: 'user',
windows: [
{span: ms('1m'), limit: 10},
{span: ms('1h'), limit: 100},
],
});
try {
await rateLimiter.attempt('<user id>');
} catch (error) {
if (error instanceof RateLimitExceededError) {
// ...
}
}
Express
app.use((req, _res, next) => {
const ip = req.headers['x-forwarded-for'] || req.ip;
void rateLimiter.attempt(ip).then(
() => next(),
error => next(error),
);
});
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.