Home / گائیڈز / Next.js فارم بیک اینڈ انٹیگریشن (ایپ راؤٹر اور سرور ایکشنز)
انٹیگریشن گائیڈ · سامنے اور اگلا. جے ایس

Next.js فارم بیک اینڈ انٹیگریشن (ایپ راؤٹر اور سرور ایکشنز)

Next.js 14/15 میں Lugatu اینڈ پوائنٹس اور صفر کریڈینشل ایکسپوژر کے ساتھ سرور ایکشنز کا استعمال کرتے ہوئے رابطہ فارم کو ہینڈل کرنے کے لیے مکمل ٹائپ اسکرپٹ اور ری ایکٹ عمل درآمد گائیڈ۔

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. لوڈنگ اسٹیٹ کے ساتھ کلائنٹ سائیڈ فارم کا جزو

اپنے سرور ایکشن کو قابل رسائی لوڈنگ انڈیکیٹرز کے ساتھ React 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 کلید کے ساتھ کلائنٹ سائڈ براؤزر کوڈ سے fetch() کال کر رہے ہیں۔ یا تو Next.js سرور ایکشن پر سوئچ کریں یا API کلید کے بغیر پبلک فارم اینڈ پوائنٹ کا استعمال کریں۔

اکثر پوچھے گئے سوالات

کیا میں اسے Vercel یا Cloudflare صفحات پر تعینات کر سکتا ہوں؟

جی ہاں سرور ایکشن بغیر کسی سرور کے پلیٹ فارمز اور ایج رن ٹائمز پر کام کرتا ہے جو Next.js کے ذریعے تعاون یافتہ ہے۔

اپنا فارم اینڈ پوائنٹ بنانے کے لیے تیار ہیں؟

سیکنڈوں میں مفت شروع کریں۔ کریڈٹ کارڈ کی ضرورت نہیں ہے۔

مفت شروع کریں۔ →