Astro Kontaktformulär Integration (Statisk & SSR)
Hur man lägger till kontaktformulär till Astro statiska webbplatser (SSG) och hybridserverrutter med hjälp av Lugatu-slutpunkter utan att underhålla e-postservrar eller databaser.
1. Ren statisk plats (SSG) Form förtäring
Astro är känt för noll-JavaScript som standard. Med Lugatu kan du hålla din Astro-webbplats 100 % statisk samtidigt som du samlar in förfrågningar med vanliga HTML-formulär och lätt hämtning på klientsidan.
---
// src/pages/contact.astro
---
<form id="astro-contact-form" class="space-y-4 max-w-md">
<div>
<label class="block text-sm font-semibold mb-1">Your Name</label>
<input type="text" name="name" required class="w-full border rounded-xl p-2.5" />
</div>
<div>
<label class="block text-sm font-semibold mb-1">Email Address</label>
<input type="email" name="email" required class="w-full border rounded-xl p-2.5" />
</div>
<div>
<label class="block text-sm font-semibold mb-1">Message</label>
<textarea name="message" rows="4" required class="w-full border rounded-xl p-2.5"></textarea>
</div>
<input type="text" name="_gotcha" style="display:none !important" tabindex="-1" autocomplete="off" />
<button type="submit" class="btn-primary-editorial py-2.5 px-6">Send Message</button>
</form>
<script>
const form = document.getElementById('astro-contact-form') as HTMLFormElement;
form?.addEventListener('submit', async (e) => {
e.preventDefault();
const formData = new FormData(form);
const payload = {
fields: {
name: formData.get('name'),
email: formData.get('email'),
message: formData.get('message'),
},
honeypot: formData.get('_gotcha') || '',
};
const res = await fetch('https://www.lugatu.com/api/v1/public/forms/YOUR_PUBLIC_FORM_ID/submissions', {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' },
body: JSON.stringify(payload),
});
if (res.ok) {
alert('Thank you! Message delivered.');
form.reset();
}
});
</script>
2. Astro Hybrid / SSR API Route med Server API Key
Om din Astro-webbplats körs i hybrid- eller SSR-läge på Cloudflare Pages, Netlify eller Vercel, vidarebefordra bidrag säkert via en Astro API-rutt.
import type { APIRoute } from 'astro';
export const POST: APIRoute = async ({ request }) => {
const data = await request.formData();
const fields = {
name: data.get('name')?.toString(),
email: data.get('email')?.toString(),
message: data.get('message')?.toString(),
};
const res = await fetch(`https://www.lugatu.com/api/v1/forms/${import.meta.env.LUGATU_FORM_ID}/submissions`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${import.meta.env.LUGATU_API_KEY}`,
'Content-Type': 'application/json',
'Idempotency-Key': crypto.randomUUID(),
},
body: JSON.stringify({ fields }),
});
return new Response(JSON.stringify({ success: res.ok }), {
status: res.status,
headers: { 'Content-Type': 'application/json' },
});
};
Säkerhet och autentisering Invariant
Säkerhetsinstruktion: Exponera aldrig import.meta.env.LUGATU_API_KEY i Astro-skripttaggar på klientsidan. Klientskript får endast använda den offentliga slutpunkten.
Felsökning och vanliga förtäringsfel
Se till att dina produktionsmiljövariabler (LUGATU_FORM_ID och LUGATU_API_KEY) är konfigurerade i din värdpanel.
Vanliga frågor
Kan jag hålla min Astro-webbplats 100 % statisk med Lugatu?
Ja. Rena statiska (SSG) webbplatser skickas direkt till Lugatu offentliga slutpunkt utan att kräva någon serverberäkning på din värdleverantör.
Är du redo att skapa din formulärslutpunkt?
Kom igång gratis på några sekunder. Inget kreditkort krävs.