Files
2026-01-12 00:14:41 +09:00

52 lines
1.3 KiB
TypeScript

interface Env {
COUNTER: KVNamespace
}
interface CounterData {
count: number
}
export const onRequestPost: PagesFunction<Env> = async (context) => {
const { COUNTER } = context.env
// Get current count
const data = await COUNTER.get<CounterData>("site_counter", "json")
const currentCount = data?.count ?? 0
const newCount = currentCount + 1
// Update count
await COUNTER.put("site_counter", JSON.stringify({ count: newCount }))
return new Response(JSON.stringify({ count: newCount }), {
headers: {
"Content-Type": "application/json",
"Access-Control-Allow-Origin": "*",
},
})
}
export const onRequestGet: PagesFunction<Env> = async (context) => {
const { COUNTER } = context.env
// Get current count without incrementing
const data = await COUNTER.get<CounterData>("site_counter", "json")
const count = data?.count ?? 0
return new Response(JSON.stringify({ count }), {
headers: {
"Content-Type": "application/json",
"Access-Control-Allow-Origin": "*",
},
})
}
export const onRequestOptions: PagesFunction = async () => {
return new Response(null, {
headers: {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET, POST, OPTIONS",
"Access-Control-Allow-Headers": "Content-Type",
},
})
}