Template
Modelo do encurtador em Next.js
Gerado a partir de deploy-templates/nextjs (dado.cloud ab2f4c0).
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
import { buscarLink, FORMATO_CODIGO, registrarClique, type Link } from '@/lib/links';
|
||||
import { respostaNaoEncontrada } from '@/lib/paginas';
|
||||
|
||||
type Contexto = { params: Promise<{ codigo: string }> };
|
||||
|
||||
function redirecionar(link: Link | null): Response {
|
||||
if (!link) return respostaNaoEncontrada();
|
||||
return new Response(null, {
|
||||
status: 302,
|
||||
headers: { Location: link.url, 'Cache-Control': 'no-store', 'Referrer-Policy': 'no-referrer' },
|
||||
});
|
||||
}
|
||||
|
||||
// O botão "Continuar" leva para GET /<código>/ir: aqui o servidor soma o
|
||||
// clique e redireciona (302) para o link.
|
||||
export async function GET(_request: Request, { params }: Contexto) {
|
||||
const { codigo } = await params;
|
||||
return redirecionar(FORMATO_CODIGO.test(codigo) ? registrarClique(codigo) : null);
|
||||
}
|
||||
|
||||
// HEAD (robôs que só conferem o endereço) responde igual, mas não conta clique.
|
||||
export async function HEAD(_request: Request, { params }: Contexto) {
|
||||
const { codigo } = await params;
|
||||
return redirecionar(FORMATO_CODIGO.test(codigo) ? buscarLink(codigo) : null);
|
||||
}
|
||||
Reference in New Issue
Block a user