தமிழ்

Next.js 14 சர்வர் ஆக்சன்ஸ் பற்றிய விரிவான வழிகாட்டி. படிவ கையாளுதல், தரவு சரிபார்ப்பு, பாதுகாப்பு மற்றும் நவீன வலை பயன்பாடுகளுக்கான மேம்பட்ட நுட்பங்களை உள்ளடக்கியது.

Next.js 14 சர்வர் ஆக்சன்ஸ்: படிவ கையாளுதலில் சிறந்த நடைமுறைகளில் தேர்ச்சி பெறுதல்

Next.js 14 செயல்திறன் மிக்க மற்றும் பயனர் நட்புடன் கூடிய வலைப் பயன்பாடுகளை உருவாக்குவதற்கான சக்திவாய்ந்த அம்சங்களை அறிமுகப்படுத்துகிறது. இவற்றில், சர்வர் ஆக்சன்ஸ் (Server Actions) படிவ சமர்ப்பிப்புகள் மற்றும் தரவு மாற்றங்களை நேரடியாக சர்வரில் கையாளுவதற்கான ஒரு மாற்றத்தக்க வழியாக தனித்து நிற்கிறது. இந்த வழிகாட்டி Next.js 14 இல் உள்ள சர்வர் ஆக்சன்ஸ் பற்றிய ஒரு விரிவான கண்ணோட்டத்தை வழங்குகிறது, இது படிவ கையாளுதல், தரவு சரிபார்ப்பு, பாதுகாப்பு மற்றும் மேம்பட்ட நுட்பங்களுக்கான சிறந்த நடைமுறைகளில் கவனம் செலுத்துகிறது. வலுவான மற்றும் அளவிடக்கூடிய வலைப் பயன்பாடுகளை உருவாக்க உங்களுக்கு உதவும் நடைமுறை எடுத்துக்காட்டுகளை ஆராய்ந்து, செயல்படுத்தக்கூடிய நுண்ணறிவுகளை வழங்குவோம்.

Next.js சர்வர் ஆக்சன்ஸ் என்றால் என்ன?

சர்வர் ஆக்சன்ஸ் என்பவை சர்வரில் இயங்கும் ασύγχρονος செயல்பாடுகள் ஆகும், அவற்றை ரியாக்ட் கூறுகளிலிருந்து (React components) நேரடியாக அழைக்கலாம். அவை படிவ சமர்ப்பிப்புகள் மற்றும் தரவு மாற்றங்களைக் கையாளுவதற்கு பாரம்பரிய API வழிகளின் தேவையை நீக்குகின்றன, இதன் விளைவாக எளிமைப்படுத்தப்பட்ட குறியீடு, மேம்பட்ட பாதுகாப்பு மற்றும் மேம்பட்ட செயல்திறன் ஆகியவை கிடைக்கின்றன. சர்வர் ஆக்சன்ஸ் என்பவை ரியாக்ட் சர்வர் கூறுகள் (React Server Components - RSCs) ஆகும், அதாவது அவை சர்வரில் செயல்படுத்தப்படுகின்றன, இது வேகமான ஆரம்ப பக்க ஏற்றங்களுக்கும் மேம்பட்ட SEO-க்கும் வழிவகுக்கிறது.

சர்வர் ஆக்சன்ஸின் முக்கிய நன்மைகள்:

உங்கள் Next.js 14 ப்ராஜெக்ட்டை அமைத்தல்

சர்வர் ஆக்சன்ஸ்க்குள் நுழைவதற்கு முன், நீங்கள் ஒரு Next.js 14 ப்ராஜெக்ட்டை அமைத்துள்ளீர்கள் என்பதை உறுதிப்படுத்திக் கொள்ளுங்கள். நீங்கள் புதிதாகத் தொடங்குகிறீர்கள் என்றால், பின்வரும் கட்டளையைப் பயன்படுத்தி ஒரு புதிய ப்ராஜெக்ட்டை உருவாக்கவும்:

npx create-next-app@latest my-next-app

சர்வர் கூறுகள் மற்றும் ஆக்சன்ஸ்களை முழுமையாகப் பயன்படுத்த உங்கள் ப்ராஜெக்ட் app டைரக்டரி கட்டமைப்பைப் பயன்படுத்துவதை உறுதிசெய்யவும்.

சர்வர் ஆக்சன்ஸ் மூலம் அடிப்படை படிவ கையாளுதல்

ஒரு எளிய உதாரணத்துடன் ஆரம்பிக்கலாம்: ஒரு தரவுத்தளத்தில் ஒரு புதிய உருப்படியை உருவாக்க தரவைச் சமர்ப்பிக்கும் ஒரு படிவம். ஒரு உள்ளீட்டு புலம் மற்றும் ஒரு சமர்ப்பிப்பு பொத்தானுடன் ஒரு எளிய படிவத்தைப் பயன்படுத்துவோம்.

உதாரணம்: ஒரு புதிய உருப்படியை உருவாக்குதல்

முதலில், உங்கள் ரியாக்ட் கூறுக்குள் ஒரு சர்வர் ஆக்சன் செயல்பாட்டை வரையறுக்கவும். இந்த செயல்பாடு சர்வரில் படிவ சமர்ப்பிப்பு தர்க்கத்தைக் கையாளும்.

// app/components/CreateItemForm.tsx
'use client';

import { useState } from 'react';

async function createItem(formData: FormData) {
  'use server'

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

  // Simulate database interaction
  console.log('Creating item:', name);

  await new Promise((resolve) => setTimeout(resolve, 1000)); // Simulate latency

  console.log('Item created successfully!');
}

export default function CreateItemForm() {
  const [isSubmitting, setIsSubmitting] = useState(false);
  
  async function handleSubmit(formData: FormData) {
    setIsSubmitting(true);
    await createItem(formData);
    setIsSubmitting(false);
  }

  return (
    
); }

விளக்கம்:

தரவு சரிபார்ப்பு

தரவு ஒருமைப்பாட்டை உறுதி செய்வதற்கும் பாதுகாப்பு பாதிப்புகளைத் தடுப்பதற்கும் தரவு சரிபார்ப்பு மிக முக்கியமானது. சர்வர் பக்க சரிபார்ப்பைச் செய்ய சர்வர் ஆக்சன்ஸ் ஒரு சிறந்த வாய்ப்பை வழங்குகிறது. இந்த அணுகுமுறை கிளையன்ட் பக்க சரிபார்ப்புடன் மட்டும் தொடர்புடைய அபாயங்களைக் குறைக்க உதவுகிறது.

உதாரணம்: உள்ளீட்டுத் தரவைச் சரிபார்த்தல்

சரிபார்ப்பு தர்க்கத்தை சேர்க்க createItem சர்வர் ஆக்சனை மாற்றியமைக்கவும்.

// app/components/CreateItemForm.tsx
'use client';

import { useState } from 'react';

async function createItem(formData: FormData) {
  'use server'

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

  if (!name || name.length < 3) {
    throw new Error('Item name must be at least 3 characters long.');
  }

  // Simulate database interaction
  console.log('Creating item:', name);

  await new Promise((resolve) => setTimeout(resolve, 1000)); // Simulate latency

  console.log('Item created successfully!');
}

export default function CreateItemForm() {
  const [isSubmitting, setIsSubmitting] = useState(false);
  const [errorMessage, setErrorMessage] = useState(null);
  
  async function handleSubmit(formData: FormData) {
    setIsSubmitting(true);
    setErrorMessage(null);
    try {
      await createItem(formData);
    } catch (error: any) {
      setErrorMessage(error.message || 'An error occurred.');
    } finally {
      setIsSubmitting(false);
    }
  }

  return (
    
{errorMessage &&

{errorMessage}

}
); }

விளக்கம்:

சரிபார்ப்பு நூலகங்களைப் பயன்படுத்துதல்

மேலும் சிக்கலான சரிபார்ப்பு சூழ்நிலைகளுக்கு, போன்ற சரிபார்ப்பு நூலகங்களைப் பயன்படுத்தவும்:

Zod ஐப் பயன்படுத்தி ஒரு உதாரணம் இங்கே:

// app/utils/validation.ts
import { z } from 'zod';

export const CreateItemSchema = z.object({
  name: z.string().min(3, 'Item name must be at least 3 characters long.'),
});
// app/components/CreateItemForm.tsx
'use client';

import { useState } from 'react';
import { CreateItemSchema } from '../utils/validation';

async function createItem(formData: FormData) {
  'use server'

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

  const validatedFields = CreateItemSchema.safeParse({ name });

  if (!validatedFields.success) {
    return { errors: validatedFields.error.flatten().fieldErrors };
  }

  // Simulate database interaction
  console.log('Creating item:', name);

  await new Promise((resolve) => setTimeout(resolve, 1000)); // Simulate latency

  console.log('Item created successfully!');
}

export default function CreateItemForm() {
  const [isSubmitting, setIsSubmitting] = useState(false);
  const [errorMessage, setErrorMessage] = useState(null);
  
  async function handleSubmit(formData: FormData) {
    setIsSubmitting(true);
    setErrorMessage(null);
    try {
      await createItem(formData);
    } catch (error: any) {
      setErrorMessage(error.message || 'An error occurred.');
    } finally {
      setIsSubmitting(false);
    }
  }

  return (
    
{errorMessage &&

{errorMessage}

}
); }

விளக்கம்:

பாதுகாப்பு பரிசீலனைகள்

சர்வர் ஆக்சன்ஸ் சர்வரில் குறியீட்டை இயக்குவதன் மூலம் பாதுகாப்பை மேம்படுத்துகின்றன, ஆனால் உங்கள் பயன்பாட்டைப் பொதுவான அச்சுறுத்தல்களிலிருந்து பாதுகாக்க பாதுகாப்பு சிறந்த நடைமுறைகளைப் பின்பற்றுவது இன்னும் முக்கியமானது.

குறுக்கு-தள கோரிக்கை மோசடியைத் தடுத்தல் (CSRF)

CSRF தாக்குதல்கள் ஒரு வலைத்தளம் ஒரு பயனரின் உலாவியில் வைத்திருக்கும் நம்பிக்கையைச் சுரண்டுகின்றன. CSRF தாக்குதல்களைத் தடுக்க, CSRF பாதுகாப்பு வழிமுறைகளைச் செயல்படுத்தவும்.

சர்வர் ஆக்சன்ஸைப் பயன்படுத்தும் போது Next.js தானாகவே CSRF பாதுகாப்பைக் கையாளுகிறது. இந்த கட்டமைப்பு ஒவ்வொரு படிவ சமர்ப்பிப்பிற்கும் ஒரு CSRF டோக்கனை உருவாக்கி சரிபார்க்கிறது, கோரிக்கை உங்கள் பயன்பாட்டிலிருந்து உருவானது என்பதை உறுதி செய்கிறது.

பயனர் அங்கீகாரம் மற்றும் அங்கீகாரத்தைக் கையாளுதல்

அங்கீகரிக்கப்பட்ட பயனர்கள் மட்டுமே சில செயல்களைச் செய்ய முடியும் என்பதை உறுதிப்படுத்தவும். முக்கியத் தரவு மற்றும் செயல்பாடுகளைப் பாதுகாக்க அங்கீகாரம் மற்றும் அங்கீகார வழிமுறைகளைச் செயல்படுத்தவும்.

ஒரு சர்வர் ஆக்சனைப் பாதுகாக்க NextAuth.js ஐப் பயன்படுத்தி ஒரு உதாரணம் இங்கே:

// app/components/CreateItemForm.tsx
'use client';

import { useState } from 'react';
import { getServerSession } from 'next-auth';
import { authOptions } from '../../app/api/auth/[...nextauth]/route';

async function createItem(formData: FormData) {
  'use server'

  const session = await getServerSession(authOptions);

  if (!session) {
    throw new Error('Unauthorized');
  }

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

  // Simulate database interaction
  console.log('Creating item:', name, 'by user:', session.user?.email);

  await new Promise((resolve) => setTimeout(resolve, 1000)); // Simulate latency

  console.log('Item created successfully!');
}

export default function CreateItemForm() {
  const [isSubmitting, setIsSubmitting] = useState(false);
  const [errorMessage, setErrorMessage] = useState(null);
  
  async function handleSubmit(formData: FormData) {
    setIsSubmitting(true);
    setErrorMessage(null);
    try {
      await createItem(formData);
    } catch (error: any) {
      setErrorMessage(error.message || 'An error occurred.');
    } finally {
      setIsSubmitting(false);
    }
  }

  return (
    
{errorMessage &&

{errorMessage}

}
); }

விளக்கம்:

உள்ளீட்டுத் தரவைத் தூய்மைப்படுத்துதல்

குறுக்கு-தள ஸ்கிரிப்டிங் (XSS) தாக்குதல்களைத் தடுக்க உள்ளீட்டுத் தரவைத் தூய்மைப்படுத்துங்கள். XSS தாக்குதல்கள் ஒரு வலைத்தளத்தில் தீங்கிழைக்கும் குறியீடு செலுத்தப்படும்போது நிகழ்கின்றன, இது பயனர் தரவு அல்லது பயன்பாட்டு செயல்பாட்டை பாதிக்கக்கூடும்.

உங்கள் சர்வர் ஆக்சன்ஸில் பயனர் வழங்கிய உள்ளீட்டைச் செயலாக்குவதற்கு முன் அதைத் தூய்மைப்படுத்த DOMPurify அல்லது sanitize-html போன்ற நூலகங்களைப் பயன்படுத்தவும்.

மேம்பட்ட நுட்பங்கள்

இப்போது நாம் அடிப்படைகளைப் பார்த்துள்ளோம், சர்வர் ஆக்சன்ஸை திறம்படப் பயன்படுத்துவதற்கான சில மேம்பட்ட நுட்பங்களை ஆராய்வோம்.

ஆப்டிமிஸ்டிக் அப்டேட்ஸ் (Optimistic Updates)

ஆப்டிமிஸ்டிக் அப்டேட்ஸ், சர்வர் உறுதிப்படுத்தும் முன்பே, செயல் வெற்றி பெறும் எனக்கருதி உடனடியாக UI-ஐப் புதுப்பிப்பதன் மூலம் சிறந்த பயனர் அனுபவத்தை வழங்குகின்றன. சர்வரில் செயல் தோல்வியுற்றால், UI அதன் முந்தைய நிலைக்குத் திரும்பும்.

// app/components/UpdateItemForm.tsx
'use client';

import { useState } from 'react';

async function updateItem(id: string, formData: FormData) {
  'use server'

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

  // Simulate database interaction
  console.log('Updating item:', id, 'with name:', name);

  await new Promise((resolve) => setTimeout(resolve, 1000)); // Simulate latency

  // Simulate failure (for demonstration purposes)
  const shouldFail = Math.random() < 0.5;
  if (shouldFail) {
    throw new Error('Failed to update item.');
  }

  console.log('Item updated successfully!');
  return { name }; // Return the updated name
}

export default function UpdateItemForm({ id, initialName }: { id: string; initialName: string }) {
  const [isSubmitting, setIsSubmitting] = useState(false);
  const [errorMessage, setErrorMessage] = useState(null);
  const [itemName, setItemName] = useState(initialName);

  async function handleSubmit(formData: FormData) {
    setIsSubmitting(true);
    setErrorMessage(null);

    // Optimistically update the UI
    const newName = formData.get('name') as string;
    setItemName(newName);

    try {
      const result = await updateItem(id, formData);
      //If success then update is already reflected in UI through setItemName

    } catch (error: any) {
      setErrorMessage(error.message || 'An error occurred.');
      // Revert the UI on error
      setItemName(initialName);
    } finally {
      setIsSubmitting(false);
    }
  }

  return (
    

Current Name: {itemName}

{errorMessage &&

{errorMessage}

}
); }

விளக்கம்:

தரவை மீண்டும் சரிபார்த்தல் (Revalidating)

ஒரு சர்வர் ஆக்சன் தரவை மாற்றியமைத்த பிறகு, UI சமீபத்திய மாற்றங்களைப் பிரதிபலிக்கிறது என்பதை உறுதிப்படுத்த நீங்கள் கேச் செய்யப்பட்ட தரவை மீண்டும் சரிபார்க்க வேண்டியிருக்கலாம். Next.js தரவை மீண்டும் சரிபார்க்க பல வழிகளை வழங்குகிறது:

ஒரு புதிய உருப்படியை உருவாக்கிய பிறகு ஒரு பாதையை மீண்டும் சரிபார்ப்பதற்கான உதாரணம் இங்கே:

// app/components/CreateItemForm.tsx
'use client';

import { useState } from 'react';
import { revalidatePath } from 'next/cache';

async function createItem(formData: FormData) {
  'use server'

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

  // Simulate database interaction
  console.log('Creating item:', name);

  await new Promise((resolve) => setTimeout(resolve, 1000)); // Simulate latency

  console.log('Item created successfully!');

  revalidatePath('/items'); // Revalidate the /items path
}

export default function CreateItemForm() {
  const [isSubmitting, setIsSubmitting] = useState(false);
  const [errorMessage, setErrorMessage] = useState(null);
  
  async function handleSubmit(formData: FormData) {
    setIsSubmitting(true);
    setErrorMessage(null);
    try {
      await createItem(formData);
    } catch (error: any) {
      setErrorMessage(error.message || 'An error occurred.');
    } finally {
      setIsSubmitting(false);
    }
  }

  return (
    
{errorMessage &&

{errorMessage}

}
); }

விளக்கம்:

சர்வர் ஆக்சன்ஸிற்கான சிறந்த நடைமுறைகள்

சர்வர் ஆக்சன்ஸின் நன்மைகளை அதிகரிக்க, பின்வரும் சிறந்த நடைமுறைகளைக் கவனியுங்கள்:

பொதுவான ஆபத்துகளும் அவற்றைத் தவிர்ப்பது எப்படி

சர்வர் ஆக்சன்ஸ் பல நன்மைகளை வழங்கினாலும், கவனிக்க வேண்டிய சில பொதுவான ஆபத்துகள் உள்ளன:

முடிவுரை

Next.js 14 சர்வர் ஆக்சன்ஸ் படிவ சமர்ப்பிப்புகள் மற்றும் தரவு மாற்றங்களை நேரடியாக சர்வரில் கையாளுவதற்கான சக்திவாய்ந்த மற்றும் திறமையான வழியை வழங்குகின்றன. இந்த வழிகாட்டியில் கோடிட்டுக் காட்டப்பட்டுள்ள சிறந்த நடைமுறைகளைப் பின்பற்றுவதன் மூலம், நீங்கள் வலுவான, பாதுகாப்பான மற்றும் செயல்திறன் மிக்க வலைப் பயன்பாடுகளை உருவாக்கலாம். உங்கள் குறியீட்டை எளிதாக்கவும், பாதுகாப்பை மேம்படுத்தவும், ஒட்டுமொத்த பயனர் அனுபவத்தை மேம்படுத்தவும் சர்வர் ஆக்சன்ஸைப் பயன்படுத்துங்கள். இந்த கொள்கைகளை நீங்கள் ஒருங்கிணைக்கும்போது, உங்கள் மேம்பாட்டுத் தேர்வுகளின் உலகளாவிய தாக்கத்தைக் கவனியுங்கள். உங்கள் படிவங்கள் மற்றும் தரவு கையாளுதல் செயல்முறைகள் பல்வேறு சர்வதேச பார்வையாளர்களுக்கு அணுகக்கூடியதாகவும், பாதுகாப்பாகவும், பயனர் நட்புடன் இருப்பதை உறுதிசெய்யுங்கள். இந்த உள்ளடக்கத்திற்கான அர்ப்பணிப்பு உங்கள் பயன்பாட்டின் பயன்பாட்டினை மேம்படுத்துவதோடு மட்டுமல்லாமல், உலக அளவில் அதன் வீச்சு மற்றும் செயல்திறனையும் விரிவுபடுத்தும்.