Skip to content

Commit 259d6f9

Browse files
committed
fix: add temp cache
1 parent f69c049 commit 259d6f9

File tree

3 files changed

+29
-7
lines changed

3 files changed

+29
-7
lines changed

src/server/CacheManager.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,10 @@ export default class CacheManager {
1818
return null;
1919
}
2020
}
21-
set(url: string, html: string) {
21+
async set(url: string, html: string) {
2222
const rule = checkCacheRule(url);
2323
if (!rule) return;
24-
return redis.set(createCacheKey(url), html);
24+
await redis.set(createCacheKey(url), html);
25+
await redis.expire(createCacheKey(url), 300);
2526
}
2627
}

src/server/rateLimitMiddleware.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,13 @@ const parseNumber = (value: string | null) => {
1111
const rateLimitMiddleware: Middleware = async (ctx, next) => {
1212
const ip = ctx.request.ips.slice(-1)[0] || ctx.request.ip;
1313

14+
const isBlockedUrl = await redis.get(`${ctx.url}:blocked`);
15+
if (isBlockedUrl === '1') {
16+
ctx.status = 429;
17+
ctx.body = { msg: 'Too many request' };
18+
return;
19+
}
20+
1421
const key = `${ip}:pageview`;
1522
const blockedKey = `${ip}:blocked`;
1623

src/server/ssrMiddleware.ts

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import { Middleware } from 'koa';
22
import serverRender from './serverRender';
3+
import CacheManager from './CacheManager';
4+
5+
const cache = new CacheManager();
36

47
const ssrMiddleware: Middleware = async (ctx, next) => {
58
const ip = ctx.request.ips.slice(-1)[0] || ctx.request.ip;
@@ -9,25 +12,36 @@ const ssrMiddleware: Middleware = async (ctx, next) => {
912
return;
1013
}
1114

12-
console.log(ip + ' >> ' + ctx.url);
15+
const isLoggedIn = !!(
16+
ctx.cookies.get('refresh_token') || ctx.cookies.get('access_token')
17+
);
18+
19+
if (!isLoggedIn) {
20+
const exists = await cache.get(ctx.url);
21+
if (exists !== null) {
22+
return exists;
23+
}
24+
}
1325

1426
try {
1527
const result = await serverRender({
1628
url: ctx.url,
1729
cookie: ctx.headers.cookie,
18-
loggedIn: !!(
19-
ctx.cookies.get('refresh_token') || ctx.cookies.get('access_token')
20-
),
30+
loggedIn: isLoggedIn,
2131
});
2232
if (!result) {
2333
return next();
2434
}
2535
ctx.body = result.html;
2636
ctx.status = result.statusCode;
37+
38+
if (!isLoggedIn) {
39+
await cache.set(ctx.url, result.html ?? '');
40+
}
2741
} catch (e) {
2842
ctx.throw(500, e as any);
2943
}
30-
console.log(ip + '<< ' + ctx.url);
44+
console.log(ip + ' << ' + ctx.url);
3145
};
3246

3347
export default ssrMiddleware;

0 commit comments

Comments
 (0)