Skip to content

Commit 610282e

Browse files
committed
fix: fixed timeout issue and redis disconnection causing rate limit to block requests
1 parent 635b304 commit 610282e

File tree

3 files changed

+888
-927
lines changed

3 files changed

+888
-927
lines changed

index.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,17 @@ const etag = require('koa-etag');
1919
const json = require('koa-json');
2020
const koa404Handler = require('koa-404-handler');
2121
const koaConnect = require('koa-connect');
22+
const ms = require('ms');
2223
const multimatch = require('multimatch');
24+
const ratelimit = require('@ladjs/koa-simple-ratelimit');
2325
const removeTrailingSlashes = require('koa-no-trailing-slash');
2426
const requestId = require('express-request-id');
2527
const requestReceived = require('request-received');
2628
const responseTime = require('response-time');
2729
const sharedConfig = require('@ladjs/shared-config');
2830
const { boolean } = require('boolean');
29-
const { ratelimit } = require('koa-simple-ratelimit');
31+
32+
const RATE_LIMIT_EXCEEDED = `Rate limit exceeded, retry in %s.`;
3033

3134
class API {
3235
constructor(config, client) {
@@ -109,7 +112,14 @@ class API {
109112

110113
return ratelimit({
111114
...this.config.rateLimit,
112-
db: this.client
115+
db: this.client,
116+
logger: cabin,
117+
errorMessage(exp) {
118+
const fn =
119+
typeof ctx.request.t === 'function' ? ctx.request.t : util.format;
120+
// NOTE: ms does not support i18n localization
121+
return fn(RATE_LIMIT_EXCEEDED, ms(exp, { long: true }));
122+
}
113123
})(ctx, next);
114124
});
115125
}

package.json

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,9 @@
2222
"dependencies": {
2323
"@koa/router": "^10.1.1",
2424
"@ladjs/i18n": "^7.2.6",
25+
"@ladjs/koa-simple-ratelimit": "^3.0.0",
2526
"@ladjs/redis": "^1.0.7",
26-
"@ladjs/shared-config": "^6.0.0",
27+
"@ladjs/shared-config": "^6.0.2",
2728
"@ladjs/store-ip-address": "^0.0.7",
2829
"boolean": "^3.2.0",
2930
"cabin": "^9.1.2",
@@ -41,29 +42,29 @@
4142
"koa-etag": "^4.0.0",
4243
"koa-json": "^2.0.2",
4344
"koa-no-trailing-slash": "^2.1.0",
44-
"koa-simple-ratelimit": "^5.1.1",
4545
"lodash": "^4.17.21",
46+
"ms": "^2.1.3",
4647
"multimatch": "5",
4748
"request-received": "^0.0.3",
4849
"response-time": "^2.3.2"
4950
},
5051
"devDependencies": {
51-
"@commitlint/cli": "^16.2.4",
52-
"@commitlint/config-conventional": "^16.2.4",
52+
"@commitlint/cli": "^17.0.1",
53+
"@commitlint/config-conventional": "^17.0.0",
5354
"ava": "^4.2.0",
5455
"codecov": "^3.8.3",
5556
"cross-env": "^7.0.3",
56-
"eslint": "^8.14.0",
57+
"eslint": "^8.16.0",
5758
"eslint-config-xo-lass": "^1.0.6",
5859
"fixpack": "^4.0.0",
59-
"husky": "^7.0.4",
60-
"lint-staged": "12.4.1",
61-
"mongoose": "^6.3.2",
60+
"husky": "^8.0.1",
61+
"lint-staged": "12.4.2",
62+
"mongoose": "^6.3.4",
6263
"nyc": "^15.1.0",
6364
"remark-cli": "^10.0.1",
6465
"remark-preset-github": "^4.0.1",
6566
"supertest": "^6.2.3",
66-
"xo": "^0.48.0"
67+
"xo": "^0.49.0"
6768
},
6869
"engines": {
6970
"node": ">=10.10.0"

0 commit comments

Comments
 (0)