Merge pull request #90 from abdelaziz-mahdy/add-cache-headers
feat(cache): add Cache-Control middleware and update .env.example
This commit is contained in:
@@ -23,3 +23,11 @@ ANIWATCH_API_MAX_REQS=70
|
|||||||
|
|
||||||
# env to use optional redis caching functionality
|
# env to use optional redis caching functionality
|
||||||
ANIWATCH_API_REDIS_CONN_URL=<rediss://default:your-secure-password@your-redis-instance-name.provider.com:6379>
|
ANIWATCH_API_REDIS_CONN_URL=<rediss://default:your-secure-password@your-redis-instance-name.provider.com:6379>
|
||||||
|
|
||||||
|
# .env.example - Environment configuration file for Aniwatch API
|
||||||
|
|
||||||
|
# Cache-Control settings for Vercel Edge Caching
|
||||||
|
# ANIWATCH_API_S_MAXAGE: Specifies the maximum amount of time (in seconds) a resource is considered fresh when served by a CDN cache.
|
||||||
|
ANIWATCH_API_S_MAXAGE=60
|
||||||
|
# ANIWATCH_API_STALE_WHILE_REVALIDATE: Specifies the amount of time (in seconds) a resource is served stale while a new one is fetched.
|
||||||
|
ANIWATCH_API_STALE_WHILE_REVALIDATE=30
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
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;
|
||||||
@@ -5,6 +5,7 @@ import corsConfig from "./config/cors.js";
|
|||||||
import { ratelimit } from "./config/ratelimit.js";
|
import { ratelimit } from "./config/ratelimit.js";
|
||||||
|
|
||||||
import { hianimeRouter } from "./routes/hianime.js";
|
import { hianimeRouter } from "./routes/hianime.js";
|
||||||
|
import cacheControlMiddleware from "./config/cacheControlMiddleware.js";
|
||||||
|
|
||||||
import { Hono } from "hono";
|
import { Hono } from "hono";
|
||||||
import { logger } from "hono/logger";
|
import { logger } from "hono/logger";
|
||||||
@@ -26,6 +27,7 @@ const app = new Hono<{ Variables: AniwatchAPIVariables }>();
|
|||||||
|
|
||||||
app.use(logger());
|
app.use(logger());
|
||||||
app.use(corsConfig);
|
app.use(corsConfig);
|
||||||
|
app.use(cacheControlMiddleware);
|
||||||
|
|
||||||
// CAUTION: For personal deployments, "refrain" from having an env
|
// CAUTION: For personal deployments, "refrain" from having an env
|
||||||
// named "ANIWATCH_API_HOSTNAME". You may face rate limitting
|
// named "ANIWATCH_API_HOSTNAME". You may face rate limitting
|
||||||
|
|||||||
Reference in New Issue
Block a user