diff options
| author | Ritesh Ghosh <[email protected]> | 2024-12-24 17:07:35 +0530 |
|---|---|---|
| committer | Ritesh Ghosh <[email protected]> | 2024-12-24 17:07:35 +0530 |
| commit | 5f1f2167dfe2b99f53743e59c8354a6f8e886566 (patch) | |
| tree | 9536f09b62803a586f1457c463a3d6a75a107a48 | |
| parent | d939222757468c67d3e15f1a03d66095804dfc0c (diff) | |
| download | aniwatch-api-5f1f2167dfe2b99f53743e59c8354a6f8e886566.tar.xz aniwatch-api-5f1f2167dfe2b99f53743e59c8354a6f8e886566.zip | |
feat(cache): add cacheConfigSetter & cacheControlMiddleware by #90
| -rw-r--r-- | src/config/cacheControlMiddleware.ts | 15 | ||||
| -rw-r--r-- | src/middleware/cache.ts | 35 |
2 files changed, 35 insertions, 15 deletions
diff --git a/src/config/cacheControlMiddleware.ts b/src/config/cacheControlMiddleware.ts deleted file mode 100644 index 47035ed..0000000 --- a/src/config/cacheControlMiddleware.ts +++ /dev/null @@ -1,15 +0,0 @@ -import type { MiddlewareHandler } from "hono"; - -// Define middleware to add Cache-Control header -const cacheControlMiddleware: MiddlewareHandler = async (c, next) => { - const sMaxAge = process.env.ANIWATCH_API_S_MAXAGE || "60"; - const staleWhileRevalidate = process.env.ANIWATCH_API_STALE_WHILE_REVALIDATE || "30"; - c.header( - "Cache-Control", - `s-maxage=${sMaxAge}, stale-while-revalidate=${staleWhileRevalidate}` - ); - - await next(); -}; - -export default cacheControlMiddleware; diff --git a/src/middleware/cache.ts b/src/middleware/cache.ts new file mode 100644 index 0000000..fc249c2 --- /dev/null +++ b/src/middleware/cache.ts @@ -0,0 +1,35 @@ +import { config } from "dotenv"; +import { AniwatchAPICache } from "../config/cache.js"; +import type { MiddlewareHandler } from "hono"; + +config(); + +// Define middleware to add Cache-Control header +export const cacheControlMiddleware: MiddlewareHandler = async (c, next) => { + const sMaxAge = process.env.ANIWATCH_API_S_MAXAGE || "60"; + const staleWhileRevalidate = + process.env.ANIWATCH_API_STALE_WHILE_REVALIDATE || "30"; + + c.header( + "Cache-Control", + `s-maxage=${sMaxAge}, stale-while-revalidate=${staleWhileRevalidate}` + ); + + await next(); +}; + +export function cacheConfigSetter(keySliceIndex: number): MiddlewareHandler { + return async (c, next) => { + const { pathname, search } = new URL(c.req.url); + + c.set("CACHE_CONFIG", { + key: `${pathname.slice(keySliceIndex) + search}`, + duration: Number( + c.req.header(AniwatchAPICache.CACHE_EXPIRY_HEADER_NAME) || + AniwatchAPICache.DEFAULT_CACHE_EXPIRY_SECONDS + ), + }); + + await next(); + }; +} |
