
Đếm lượt xem bằng Netlify Blobs
- Thẻ
- Ngày đăng
- Lượt xem
Site tĩnh thì không có chỗ nào giữ số lượt xem. Tôi không muốn dựng database chỉ để đếm, nên dùng Netlify Blobs: một key-value store đi kèm sẵn, key là slug, value là con số.
Cả function chỉ có bấy nhiêu
import { getStore } from '@netlify/blobs';
export default async function handler(request: Request) {
const slug = new URL(request.url).searchParams.get('slug');
if (!slug || !/^[a-z0-9-]{1,120}$/.test(slug)) {
return Response.json({ error: 'bad slug' }, { status: 400 });
}
const store = getStore('post-views');
const current = Number(await store.get(slug, { type: 'text' })) || 0;
const next = current + 1;
await store.set(slug, String(next));
return Response.json({ views: { [slug]: next } });
}Chỗ này đếm sai, và tôi chấp nhận
Đoạn tăng số là đọc rồi ghi. Blobs không có compare-and-set, nên hai request chồng nhau có thể cùng đọc ra một số và mất một lượt. Với blog cá nhân thì sai một lượt không đổi được gì, còn dựng database để đếm chính xác thì không đáng.
Thứ tôi quan tâm hơn là lúc store chết. Function trả về 200 kèm views: null, và giao diện giấu luôn con số thay vì hiện 0. Hiện 0 là nói dối; giấu đi là im lặng, đỡ hơn.