Home / మార్గదర్శకులు / Next.js ఫారమ్ బ్యాకెండ్ ఇంటిగ్రేషన్ (యాప్ రూటర్ & సర్వర్ చర్యలు)
ఇంటిగ్రేషన్ గైడ్ · ఫ్రంటెండ్ & నెక్స్ట్.JS

Next.js ఫారమ్ బ్యాకెండ్ ఇంటిగ్రేషన్ (యాప్ రూటర్ & సర్వర్ చర్యలు)

సున్నా క్రెడెన్షియల్ ఎక్స్‌పోజర్‌తో Lugatu ఎండ్‌పాయింట్‌లు మరియు సర్వర్ చర్యలను ఉపయోగించి Next.js 14/15లో సంప్రదింపు ఫారమ్‌లను నిర్వహించడానికి పూర్తి టైప్‌స్క్రిప్ట్ మరియు రియాక్ట్ ఇంప్లిమెంటేషన్ గైడ్.

1. సర్వర్ చర్యలతో Next.js యాప్ రూటర్ ఆర్కిటెక్చర్

Next.js సర్వర్ చర్యలు సర్వర్‌లో ప్రత్యేకంగా అమలు చేయబడతాయి, క్లయింట్ బండిల్‌లలోని రహస్యాలను బహిర్గతం చేయకుండా ప్రైవేట్ Lugatu API కీలతో విచారణలను సమర్పించడానికి వాటిని ఆదర్శంగా మారుస్తుంది.

app/actions/contact.ts typescript
'use server';

export async function submitContact(prevState: any, formData: FormData) {
  // Silent rejection of automated bot submissions via honeypot trap
  const honeypot = (formData.get('_gotcha') as string) || '';
  if (honeypot) {
    return { success: true, error: null };
  }

  const name = formData.get('name') as string;
  const email = formData.get('email') as string;
  const message = formData.get('message') as string;

  if (!name || !email || !message) {
    return { success: false, error: 'All fields are required.' };
  }

  const payload = {
    fields: { name, email, message },
  };

  try {
    const res = await fetch(`https://www.lugatu.com/api/v1/forms/${process.env.LUGATU_FORM_ID}/submissions`, {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${process.env.LUGATU_API_KEY}`,
        'Content-Type': 'application/json',
        'Idempotency-Key': crypto.randomUUID(),
      },
      body: JSON.stringify(payload),
    });

    if (!res.ok) {
      return { success: false, error: 'Failed to submit form.' };
    }

    return { success: true, error: null };
  } catch (err) {
    return { success: false, error: 'Network error occurred.' };
  }
}

2. లోడ్ అవుతున్న స్థితితో క్లయింట్-సైడ్ ఫారమ్ కాంపోనెంట్

యాక్సెస్ చేయగల లోడింగ్ సూచికలతో మీ సర్వర్ చర్యను రియాక్ట్ 19 / Next.js క్లయింట్ కాంపోనెంట్‌కి కనెక్ట్ చేయండి.

components/ContactForm.tsx tsx
'use client';

import { useActionState } from 'react';
import { submitContact } from '@/app/actions/contact';

export function ContactForm() {
  const [state, formAction, isPending] = useActionState(submitContact, { success: false, error: null });

  return (
    <form action={formAction} className="space-y-4 max-w-md">
      <div>
        <label className="block text-sm font-semibold mb-1">Name</label>
        <input name="name" required className="w-full border rounded-xl p-2.5" />
      </div>
      <div>
        <label className="block text-sm font-semibold mb-1">Email</label>
        <input type="email" name="email" required className="w-full border rounded-xl p-2.5" />
      </div>
      <div>
        <label className="block text-sm font-semibold mb-1">Message</label>
        <textarea name="message" rows={4} required className="w-full border rounded-xl p-2.5" />
      </div>

      <input type="text" name="_gotcha" style={{ display: 'none' }} tabIndex={-1} autoComplete="off" />

      <button type="submit" disabled={isPending} className="btn-primary-editorial w-full py-2.5">
        {isPending ? 'Sending...' : 'Send Message'}
      </button>

      {state.success && <p className="text-emerald-700 text-sm">Thank you! Your message was received.</p>}
      {state.error && <p className="text-red-700 text-sm">{state.error}</p>}
    </form>
  );
}

భద్రత & ప్రమాణీకరణ మార్పులేనిది

భద్రతా సూచన: NEXT_PUBLIC_తో LUGATU_API_KEY ఉపసర్గ ఎప్పుడూ చేయవద్దు. ప్రైవేట్ సర్వర్ వైపు వేరియబుల్స్ మాత్రమే మీ లైవ్ API కీని సురక్షితంగా పట్టుకోగలవు.

ట్రబుల్షూటింగ్ & సాధారణ తీసుకోవడం లోపాలు

API కీ అభ్యర్థన 403 FORBIDDEN_BROWSER_ORIGINని అందిస్తుంది

మీరు API కీతో క్లయింట్ వైపు బ్రౌజర్ కోడ్ నుండి పొందడం() కాల్ చేస్తున్నారు. Next.js సర్వర్ చర్యకు మారండి లేదా API కీ లేకుండా పబ్లిక్ ఫారమ్ ఎండ్‌పాయింట్‌ని ఉపయోగించండి.

తరచుగా అడిగే ప్రశ్నలు

నేను దీన్ని వెర్సెల్ లేదా క్లౌడ్‌ఫ్లేర్ పేజీలకు అమర్చవచ్చా?

అవును. సర్వర్ చర్యలు సర్వర్‌లెస్ ప్లాట్‌ఫారమ్‌లు మరియు ఎడ్జ్ రన్‌టైమ్‌లలో సజావుగా పని చేస్తాయి.

మీ ఫారమ్ ముగింపు బిందువుని సృష్టించడానికి సిద్ధంగా ఉన్నారా?

సెకన్లలో ఉచితంగా ప్రారంభించండి. క్రెడిట్ కార్డ్ అవసరం లేదు.

ఉచితంగా ప్రారంభించండి →