# egg-ratelimiterplus

> Abstract rate limiter for eggjs

Latest version **0.1.1** (published 2022-09-09) · ISC license · 0 weekly downloads

## Install

```sh
npm install egg-ratelimiterplus
pnpm add egg-ratelimiterplus
yarn add egg-ratelimiterplus
bun add egg-ratelimiterplus
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.1.1 |
| Published | 2022-09-09 |
| First published | 2022-09-09 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >=8.9.0 |
| Dependencies | 3 |
| Unpacked size | 15.8 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 0 |
| Author | https://github.com/feliming |
| Maintainers | bencalie |
| Keywords | egg, ratelimiterplus, egg-ratelimiterplus |

## Links

- npm: https://www.npmjs.com/package/egg-ratelimiterplus
- Repository: https://github.com/feliming/egg-ratelimiterplus
- Homepage: https://github.com/feliming/egg-ratelimiterplus#readme
- Issues: https://github.com/feliming/egg-ratelimiterplus/issues
- npm.io page: https://npm.io/package/egg-ratelimiterplus

## Dependencies (3)

- [ms](https://npm.io/package/ms.md) ^2.1.1
- [debug](https://npm.io/package/debug.md) ^4.1.0
- [ratelimiter](https://npm.io/package/ratelimiter.md) ^3.2.0

## Recent versions

- 0.1.1 (latest) — 2022-09-09
- 0.1.0 — 2022-09-09

## README

# egg-ratelimiterplus

Rate limiter for Egg.js backed by Redis.
Fork 自：https://github.com/ZQun/egg-ratelimiter

- 支持 egg [js] [ts]
- 支持 Controller 控制器内分别配置请求速率限制
- 支持设置限流时候的响应头 Content-Type，默认是 `text/plain; charset=utf-8`，可以设置为 `application/json`

## Install

```bash
$ npm i egg-ratelimiterplus --save
```

你还需要安装[egg-redis](https://www.npmjs.com/package/egg-redis) 具体参考文档

```shell
npm i egg-redis --save
```

## Configuration

Change `${app_root}/config/plugin.ts` to enable ratelimiter plugin:

```typescript
export = {
  ratelimiterplus: {
    enable: true,
    package: 'egg-ratelimiterplus',
  }
}
```

Configure ratelimiter information in `${app_root}/config/config.default.ts`:

**Instructions**

```typescript
config.ratelimiterplus = {
    db: {},//如已配置egg-redis 可删除此配置
    router: [
      {
        path: '/',//限制路由路径 此规则不会匹配(index.html?id=1)[http://url/index.html?id=1]
        max: 5,
        time: '7s', //时间单位 s m h d y ...
        message: 'Custom request overrun error message'//自定义请求超限错误信息
      },
      {
        path: '/api',
        max: 5,
        time: '7s', //时间单位 s m h d y ...
        message: 'Custom request overrun error message'//自定义请求超限错误信息
      }
    ]
}

//如果不在db中初始化redis，则需要启用egg-redis
config.redis = {
    client: {
      port: 6379,          // Redis port
      host: '127.0.0.1',   // Redis host
      password: null,
      db: 0,
    },
}
```

Configure ratelimiter information in `${app_root}/app/controller/home.ts`:

**Controller**

```typescript
export class HomeController {

  @get('/index')
  public async index(ctx?): Promise<any> {
    const { ctx, service } = this;

    // 超出速率限制返回判断
    // [true]为超出速率限制   [false]则继续向下执行
    // js返回方法为 ctx.body = 'message'
    if(await ctx.Limit({ max: 5, time: '5s' })) return 'Rate limit exceeded'


    //...
    //业务逻辑
    //...


    // 正常返回
    return {
      message: '正常数据返回',
      data: [
        {
          name: 'lee',
        }
      ]
    }
  }
}


```

## Questions & Suggestions

Please open an issue [here](https://github.com/eggjs/egg/issues).

## License

[MIT](LICENSE)

---
_Source: https://npm.io/package/egg-ratelimiterplus · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
