Zum Inhalt springen
FFormhook
Alle Anleitungen

Anleitung

Nuxt-Kontaktformular (kein Backend nötig)

Nuxt braucht keine Server-Route, um Kontakt-Einsendungen zu empfangen. Fügen Sie das einfache HTML-Formular in eine Nuxt-Seite ein, oder - wenn Sie clientseitiges Feedback wollen - verwenden Sie einen Vue-3-<script setup>-Handler mit $fetch und einer ref, die den Status verfolgt.

Verwenden Sie ein einfaches HTML-Formular

Sie benötigen keine API-Route. Das Formular sendet direkt an Formhook, und Ihr Framework muss die Einsendung nie selbst verarbeiten.

contact.html
<form action="https://formhook.app/f/YOUR_API_KEY" method="POST">
  <label>
    Email
    <input type="email" name="email" required />
  </label>

  <label>
    Message
    <textarea name="message" required></textarea>
  </label>

  <!-- honeypot: bots fill this; humans don't see it -->
  <input type="text" name="_gotcha" tabindex="-1" autocomplete="off" hidden />

  <!-- optional: send users to a thank-you page after a native POST -->
  <input type="hidden" name="_redirect" value="https://example.com/thanks" />

  <button type="submit">Send</button>
</form>

Oder mit fetch in Nuxt senden

Verwenden Sie diese Variante, wenn Sie client-seitige Erfolgs-/Fehlerzustände ohne vollständigen Seiten-Reload möchten.

pages/contact.vue
<!-- pages/contact.vue -->
<script setup lang="ts">
type Status = "idle" | "sending" | "ok" | "error";
const status = ref<Status>("idle");

async function onSubmit(e: Event) {
  e.preventDefault();
  status.value = "sending";

  const form = e.target as HTMLFormElement;
  const data = Object.fromEntries(new FormData(form));

  try {
    await $fetch("https://formhook.app/f/YOUR_API_KEY", {
      method: "POST",
      body: data,
    });
    status.value = "ok";
    form.reset();
  } catch {
    status.value = "error";
  }
}
</script>

<template>
  <p v-if="status === 'ok'">Thanks - we'll be in touch.</p>
  <form v-else @submit="onSubmit">
    <input type="email" name="email" placeholder="Email" required />
    <textarea name="message" placeholder="Message" required />
    <input type="text" name="_gotcha" tabindex="-1" hidden />
    <button type="submit" :disabled="status === 'sending'">
      {{ status === "sending" ? "Sending…" : "Send" }}
    </button>
    <p v-if="status === 'error'">Something went wrong. Please try again.</p>
  </form>
</template>

So funktioniert es

Das einfache Formular-Snippet funktioniert in jeder Nuxt-Seite (pages/contact.vue) ohne entsprechende server/api-Route. Für clientseitige Erfolgs-/Fehlerzustände verwendet das zweite Snippet $fetch - Nuxts eingebauten fetch-Wrapper - und eine ref, die die Status-State-Machine steuert. Beide gehen direkt an formhook.app/f/YOUR_API_KEY.

Was als Nächstes passiert

  • Einsendung landet innerhalb einer Sekunde in Ihrem Formhook-Dashboard.
  • Push-Benachrichtigung wird auf allen aktivierten Geräten ausgelöst.
  • Antworten Sie direkt aus dem Dashboard (Pro und höher) - keine Nuxt-Server-API oder transaktionale E-Mail-Integration nötig.

Veröffentlichen Sie heute Ihr Nuxt-Kontaktformular.

Kostenlos registrieren, Formular erstellen, API-Schlüssel einfügen. Fünf Minuten.

Kostenlos starten

Kostenlose Stufe: 5 Formulare · 250 Einsendungen/Monat · Keine Kreditkarte.

Nuxt-Kontaktformular - FAQ

Muss ich eine Nitro-Server-Route für das Formular schreiben?
Nein. Das Formular sendet direkt an Formhook, was bedeutet, dass Ihre Nuxt-Seite vollständig statisch bleiben kann, wenn Sie das wollen. Keine /server/api/contact.ts zu warten.
Funktioniert das mit `nuxt generate` (statische Seite)?
Ja. Das Kontaktformular ist nur ein HTML-POST - es interessiert sich nicht dafür, ob der Rest Ihrer Nuxt-Seite statisch oder am Edge gerendert wird.
Wo lege ich den API-Schlüssel ab? Ist es sicher, ihn zu committen?
Der API-Schlüssel ist ein Pro-Formular-Identifikator, nicht ein Geheimnis im klassischen Sinn - er ist sowieso im HTML jedes Besuchers sichtbar. Behandeln Sie ihn als öffentlichen Endpoint-Identifikator und verlassen Sie sich auf Formhooks Pro-Formular-Rate-Limits, CORS-Allowlist und Turnstile-Schalter für den Schutz.

Anleitungen für andere Frameworks

Migrating from Formspree? See how Formhook compares.