# வங்கி செயலியை உருவாக்குவது பகுதி 3: தரவு பெறும் மற்றும் பயன்படுத்தும் முறைகள் ஸ்டார் ட்ரெக்கில் என்டர்பிரைஸின் கணினியைப் பற்றி யோசிக்கவும் - கேப்டன் பিকার்ட் கப்பலின் நிலையை கேட்கும் போது, முழு இடைமுகம் நிறுத்தப்படாமல், தகவல் உடனுக்குடன் தோன்றுகிறது. அந்த தொடர்ச்சியான தகவல் ஓட்டம் தான் நாம் இங்கே டைனமிக் தரவு பெறும்முறை கொண்டு உருவாக்கப்போகும் விஷயம். இப்போதைக்கு, உங்கள் வங்கி செயலி அச்சிடப்பட்ட செய்தித்தாளைப் போன்றது - தகவல் அளிக்கிறது ஆனால் நிலைத்துவிட்டது. நாங்கள் இதை NASA-விலுள்ள மிஷன் கட்டுப்பாடு போன்ற ஒன்றாக மாற்றப்போகிறோம், அங்கு தரவு தொடர்ச்சியாக ஓடுகிறது மற்றும் பயனர் பணிச்சூழலைத் தடுக்கும் இல்லாமல் நேரடி புதுப்பிப்பாகும். நீங்கள் சர்வர்களுடன் அசிங்க்ரனஸ் முறையில் தொடர்பு கொள்ள, வெவ்வேறு நேரங்களில் வரும் தரவை கையாள, மற்றும் அர்த்தமுள்ளதாக்கும் முறையில் இயல்புநிலைத் தரவைக் மாற்ற விரும்புவீர்கள். இது ஒரு டெமோ மற்றும் தயாரிப்ப-ready மென்பொருளுக்கு இடையேயான வேறுபாடு. ## ⚡ அடுத்த 5 நிமிடங்களில் நீங்கள் செய்யக்கூடியவை **பிசியுள்ள டெவலப்பர்களுக்கான விரைவான துவக்கம்** ```mermaid flowchart LR A[⚡ 5 நிமிடங்கள்] --> B[API சர்வரை அமைக்கவும்] B --> C[curl உடன் சோதனை எடுக்கவும்] C --> D[உள்நுழைவு செயல்பாட்டை உருவாக்கவும்] D --> E[செயலில் தரவைக் காணவும்] ``` - **1-2 நிமிடங்கள்**: உங்கள் API சர்வரை (`cd api && npm start`) துவங்கி தொடர்பை சோதிக்கவும் - **3வது நிமிடம்**: fetch பயன்படுத்தி அடிப்படை `getAccount()` செயல்பாட்டை உருவாக்கவும் - **4வது நிமிடம்**: `action="javascript:login()"` கொண்டு உள்நுழைவு படிவத்துடன் இணைக்கவும் - **5வது நிமிடம்**: உள்நுழைவு சோதனையை செய்து கணக்கு தரவு consola-இல் தோன்றுவதைப் பார்க்கவும் **விரைவான சோதனைக் கட்டளைகள்**: ```bash # API இயங்குகின்றதா என்பதை சரிபார்க்கவும் curl http://localhost:5000/api # கணக்கு தரவு பெற்று பார்க்கவும் curl http://localhost:5000/api/accounts/test ``` **இது ஏன் முக்கியம்**: 5 நிமிடத்தில், நீங்கள் அத்தியாயமான asynchronous தரவு பெறும் மாயாஜாலத்தை காண்பீர்கள், இது இன்றைய வலை பயன்பாடுகளை இயக்குகிறது. இது செயலிகளின் பதிலளிப்பு மற்றும் உயிருடன் இருப்பதற்கான அடித்தளம். ## 🗺️ தரவு சார்ந்த வலை செயலிகளில் உங்கள் கற்றல் பயணம் ```mermaid journey title நிலையான பக்கங்களிலிருந்து இயக்கக்கூடிய பயன்பாடுகளுக்கு section முறையின் வளர்ச்சி புரிதல் பாரம்பரிய பக்கம் மீண்டும் ஏற்றுதல்கள்: 3: You AJAX/SPA நன்மைகள் கண்டறிதல்: 5: You Fetch API வடிவங்களை ஆற்றல் பெறுதல்: 7: You section அங்கீகாரம் கட்டமைத்தல் உள்நுழைவு செயல்பாடுகளை உருவாக்குதல்: 4: You அசிங்க் செயல்பாடுகளை கையாளுதல்: 6: You பயனர் அமர்வுகளை நிர்வகித்தல்: 8: You section இயக்கக்கூடிய UI புதுப்பிப்புகள் DOM மானிப்புலேஷன் கற்குதல்: 5: You பரிவர்த்தனை காட்சிப்படுத்தல்களை கட்டமைத்தல்: 7: You பதிலளிக்கக்கூடிய டாஷ்போர்ட்களை உருவாக்குதல்: 9: You section தொழில்முறை வடிவங்கள் வடிவமைப்பு அடிப்படையிலான உருவாக்கல்: 6: You பிழை கையாளும் நுட்பங்கள்: 7: You செயல்திறன் மேம்பாடு: 8: You ``` **உங்கள் பயண இலக்கு**: இந்த பாட முடிவில், நீங்கள் எப்படி இன்றைய வலை செயலிகள் தரவைப் பெறுகிறதன், பணியாற்றுகின்றதன் மற்றும் இயங்குதளமை மாற்றுகிறதன் வாழ்க்கையைப் புரிந்துகொள்ளலாம், இது தொழில்முறை செயலிகளிலிருந்து எதிர்பார்க்கப்படும் தெளிவான பயனர் அனுபவத்தை உருவாக்குகிறது. ## முன்னோட்டக் கேள்வித் தேர்வு [Pre-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/45) ### முன்னெச்சரிக்கை தரவு பெறுதலில் மூழ்குவதற்கு முன், இந்த கூறுகளை தயார் செய்திருப்பதை உறுதி செய்யவும்: - **பூர்வ பாடம்**: [உள்நுழைவு மற்றும் பதிவு படிவம்](../2-forms/README.md) முடித்திருங்கள் - இத்துடன் நாம் கட்டமைப்போம் - **உள்ளூர் சர்வர்**: [Node.js](https://nodejs.org) நிறுவி [API சர்வரை இயக்கவும்](../api/README.md) - **API இணைப்பு**: இந்த கட்டளையுடன் உங்கள் சர்வர் தொடர்பை சோதிக்கவும்: ```bash curl http://localhost:5000/api # எதிர்பார்க்கப்பட்ட பதில்: "பேங்க் API v1.0.0" ``` இந்த விரைவு சோதனை அனைத்து கூறுகளும் சரியாக தொடர்பு கொள்கின்றனவா என்பதைக் உறுதிப்படுத்துகிறது: - உங்கள் கணினியில் Node.js சரியாக இயங்குகிறது என்பதை சரிபார்க்கிறது - உங்கள் API சர்வர் செயல்பட்டுக் காத்திருக்கிறது என்பதை உறுதிப்படுத்துகிறது - உங்கள் செயலி சர்வரை அணுக முடியும் என்பதை சரிபார்க்கிறது (ஒரு நிறுவன மிஷன் முன் ரேடியோ தொடர்பை சோதிப்பதைப் போல்) ## 🧠 தரவு மேலாண்மை சுற்றுச்சூழல் கண்ணோட்டம் ```mermaid mindmap root((தரவு மேலாண்மை)) Authentication Flow Login Process Form Validation Credential Verification Session Management User State உலகளாவிய கணக்கு பொருள் Navigation Guards Error Handling API Communication Fetch Patterns GET Requests POST Requests Error Responses Data Formats JSON Processing URL Encoding Response Parsing Dynamic UI Updates DOM Manipulation Safe Text Updates Element Creation Template Cloning User Experience நேரடி புதுப்பிப்புகள் Error Messages Loading States Security Considerations XSS Prevention textContent Usage Input Sanitization Safe HTML Creation CORS Handling Cross-Origin Requests Header Configuration Development Setup ``` **முதன்மைக் கொள்கை**: இன்றைய வலை செயலிகள் தரவு ஒருங்கிணைப்புக் கட்டமைப்புகள் - பயனர் இடைமுகங்கள், சர்வர் API-கள், உலாவி பாதுகாப்பு மாடல்கள் இடையேயான ஒருங்கிணைப்பை செய்து, ஒரு தொடர்ச்சியான, பதிலளிக்கும் அனுபவங்களை உருவாக்குகின்றன. --- ## இன்றைய வலை செயலிகளில் தரவு பெறுதலை புரிந்துகொள்ளுதல் கடைசியாக 20 ஆண்டுகளில் வலை செயலிகள் தரவை கையாளும் விதம் மிகவும் மாறியுள்ளது. இந்த வளர்ச்சியைப் புரிந்துகொள்வதால் AJAX மற்றும் Fetch API போன்ற நவீன உத்திகள் எதற்கு பலமாக உள்ளன, ஏன் அவை வலை டெவலப்பர்களுக்கு அவசியமான கருவிகள் ஆகியுள்ளன என்பதையும் புரிந்துகொள்ள உதவும். நீங்கள் பாரம்பரிய வலைத்தளங்கள் எப்படி வேலை செய்தன என்பதையும், இன்று நாம் உருவாக்கும் திட விளைவான, பதிலளிக்கும் செயலிகளோடு எவ்வாறு வேறுபடுகிறதோ அதைப் பார்க்கலாம். ### பாரம்பரியப் பன்முக ஜாலத் செயலிகள் (MPA) வட்டிக்காலங்களில், ஒவ்வொரு கிளிக் பழைய தொலைக்காட்சியில் சேனல் மாற்றம் போன்றதாக இருந்தது - திரை வெள்ளையாக மாறி, பிறகு மெதுவாக புதிய சாரத்தை பார்க்கத் தொடங்கியது. இது முன்னோடி வலை செயலிகள் நிலவரம், ஒவ்வொரு தொடர்பும் முழு பக்கத்தை மறுதயாரிப்பதைத் தரும். ```mermaid sequenceDiagram participant User participant Browser participant Server User->>Browser: லிங்கை கிளிக் செய்கிறது அல்லது படிவம் சமர்ப்பிக்கிறது Browser->>Server: புதிய HTML பக்கம் கோருகிறது Note over Browser: பக்கம் வெற்று ஆகிறது Server->>Browser: முழுமையான HTML பக்கம் திரும்ப வழங்குகிறது Browser->>User: புதிய பக்கத்தை نمایش செய்கிறது (பிளாஷ்/மீண்டும் ஏற்றம்) ``` ![பல பக்க செயலியில் புதுப்பிப்பு பணிச்சூழல்](../../../../translated_images/ta/mpa.7f7375a1a2d4aa77.webp) **இந்த முறையால் சிக்கல் ஏன் மறைவது:** - ஒவ்வொரு கிளிக் நிரந்தரமாக முழு பக்கத்தை மறுதயார்த்து விடும் - பயனர்கள் கருத்து நடுவில் கோலத்தை இழந்து பக்கங்கள் வெளியேறும் - உங்கள் இணைய இணைப்பு அதே தலைப்பு மற்றும் அடிபகுதியைப் பத்திரப்படுத்த மீண்டும் மீண்டும் தரவிறக்கம் செய்தது - செயலிகள் ஒரு கோப்பு அலுவலகத்தில் கிளிக்கெல்லாம் படம் பார் போன்றவையாக இருந்தன ### நவீன ஒரே பக்க செயலிகள் (SPA) AJAX (Asynchronous JavaScript and XML) இந்த விளக்கத்தை முற்றிலும் மாற்றியது. சர்வதேச விண்வெளி நிலையத்தின் தொகுதிகள் போல, அங்கு விண்விண் வீரர்கள் ஒவ்வொரு கூறையும் முழுக்கு கட்டமைப்பை மாற்றாமல் மாற்றக்கூடுகிறது, AJAX-யும் ஒரே பக்கம் உள்ள குறிப்பிட்ட பகுதிகளை மறுபிரதிபலிக்க அனுமதிக்கிறது. பேர் XML-ஐ குறிப்பிடுகின்றபோது, பல் பயனாளர்களும் இன்று JSON-ஐ அதிகம் பயன்படுத்துகின்றனர், ஆனால் அடிப்படை கொள்கை மாறாது: தேவையானதை மட்டுமே புதுப்பிக்க. ```mermaid sequenceDiagram participant User participant Browser participant JavaScript participant Server User->>Browser: பக்கத்துடன் தொடர்பு கொண்டால் Browser->>JavaScript: சம்பவ நிர்வாகியை இயக்குகிறது JavaScript->>Server: தேவையான தரவுகளை மட்டுமே பெறுகிறது Server->>JavaScript: JSON தரவுகளை திருப்புகிறது JavaScript->>Browser: குறிப்பிட்ட பக்க கூறுகளை புதுப்பிக்கிறது Browser->>User: புதுப்பிக்கப்பட்ட உள்ளடக்கத்தை காட்டு (மீண்டும் ஏற்றல் இல்லை) ``` ![ஒரே பக்க செயலியில் புதுப்பிப்பு பணிச்சூழல்](../../../../translated_images/ta/spa.268ec73b41f992c2.webp) **SPAs இப்படி சிறப்பாக தோன்றுவது ஏன்:** - மாற்றம் நேர்ந்த குறிப்பிடப்பட்ட பகுதிகள் மட்டுமே புதுப்பிக்கப்படுகின்றன (அருவருப்பற்றது, சரியா?) - பயனர்கள் இடையூறுகள் இல்லாமல் பணி தொடர்கின்றனர் - குறைந்த தரவு பரிமாற்றம் அதிவேக ஸ்த்ரோதி கொண்டு வருகிறது - அனைத்தும் பதிலளிக்கும் மற்றும் ஏற்பட்ட பெரிய செயலிகள் போல் தோன்றுகின்றன ### நவீன Fetch API வரலாறு நவீன உலாவிகள் [`Fetch` API](https://developer.mozilla.org/docs/Web/API/Fetch_API) வழங்குகின்றன, அது பழைய [`XMLHttpRequest`](https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest) ஐ மாற்றுகிறது. தொலைபேசி கண்கார்ட்திலிருந்து மின்னஞ்சலுக்கு மாற்றம் போன்று, Fetch API வாக்குறுதிகளை பயன்படுத்தி சுத்தமான asynchronous குறியீட்டை வழங்குகிறது மற்றும் JSON-ஐ இயல்பாக கையாள்கிறது. | அம்சம் | XMLHttpRequest | Fetch API | |---------|----------------|----------| | **சyntax** | சிக்கலான கால்-பேக் அடிப்படையுள்ள | சுத்தமான வாக்குறுதி அடிப்படையுள்ள | | **JSON கையாளும்** | கையால் பிழைத்தல் தேவையுண்டு | உள்ளமைவு `.json()` முறை உள்ளது | | **பிழை கையாளல்** | வரையறுக்கப்பட்ட பிழை விபரங்கள் | விரிவான பிழை விவரங்கள் | | **நவீன ஆதரவு** | பழமைவாய்ந்த ஆதரவு | ES6+ வாக்குறுதிகள் மற்றும் async/await | > 💡 **உலாவி இணக்கமுறை**: சிறந்த செய்தி - Fetch API அனைத்து நவீன உலாவிகளிலும் வேலை செய்கிறது! குறிப்பிட்ட பதிப்புகளைப் பற்றி ஆர்வமானால், [caniuse.com](https://caniuse.com/fetch) -இல் முழுமையான இணக்கப்படியான கதை உள்ளது. > **படிவுரை:** - Chrome, Firefox, Safari மற்றும் Edge-இல் சிறந்த வேலை செய்கிறது (பயனர்கள் இருப்பிடங்களில்) - Internet Explorer மட்டும் கூடுதல் உதவி தேவை (உண்மையில், IE வை விட்டுவிடுவதற்குத் தயாராகுங்கள்) - பின்னர் பயன்படுத்தும் அழகான async/await வடிவமைப்புகளுக்கு மையமாக உள்ளது ### பயனர் உள்நுழைவு மற்றும் தரவு பெறுதல் செயலாக்கம் இப்போது உங்களின் வங்கி செயலியை நிலைத்த தோற்றத்திலிருந்து ஒருங்கிணைந்த செயலியாக மாற்றும் உள்நுழைவு முறைமை வடிவமைக்கலாம். பாதுகாப்பான இராணுவத்துறை போன்ற அங்கீகார நெறிமுறைகள் போல, பயனர் அங்கீகாரம் செய்து, அந்த பயனரின் தனி தொகுப்பு தரவை தருவோம். நாம் அடிப்படையான அங்கீகாரத்திலிருந்து தொடங்கி, பின்னர் தரவுப் பெறும் செயல்பாடுகளை சேர்ப்போம். #### படி 1: உள்நுழைவு செயல்பாடின் அடித்தளம் உருவாக்குதல் `app.js` கோப்பை திறந்து புதிய `login` செயல்பாட்டைச் சேர்க்கவும். இது பயனர் அங்கீகாரத்தை கையாளும்: ```javascript async function login() { const loginForm = document.getElementById('loginForm'); const user = loginForm.user.value; } ``` **இதனைப் பிரிப்போம்:** - அந்த `async` சொல்லல்? ஜாவாச்கிரிப்ட் சொல்லுகிறது "இந்த செயல்பாடு காத்திருக்க வேண்டியிருக்கலாம்" - நாங்கள் பக்கத்தில் இருந்து படிவத்தை (ID-ஆல்) எடுத்து கொண்டிருக்கிறோம் - பின்னர் பயனர் எழுதிய பயனர் பெயரைப் பெறுகிறோம் - இது ஒரு சிறந்த முறை: 'name' பண்புக்கு உரிய எந்த படிவ உள்ளீட்டையும் பெறலாம் - getElementById தொடர் அழைப்புகள் தேவை இல்லை! > 💡 **படிவ அணுகல் முறை**: ஒவ்வொரு படிவக் கட்டுப்பாட்டையும் அதன் `name` பண்பின் மூலம் (HTML-ல் `name` பண்பாக அமைக்கப்பட்ட) படிவத் துணை பொருளாக அணுகலாம். இது படிவ தரவை எல்லாம் எளிதாக வாசிக்க உதவுகிறது. #### படி 2: கணக்கு தரவு பெறும் செயல்பாடு உருவாக்குதல் பின், சர்வரிலிருந்து கணக்கு தரவுகளை பெறுவதற்கு தனிப்பட்ட செயல்பாட்டை உருவாக்குவோம். இது உங்கள் பதிவு செயல்படும் வடிவமைப்பை பின்பற்றுமாறு இயங்கும்: ```javascript async function getAccount(user) { try { const response = await fetch('//localhost:5000/api/accounts/' + encodeURIComponent(user)); return await response.json(); } catch (error) { return { error: error.message || 'Unknown error' }; } } ``` **இந்த குறியீடு செய்யும் விஷயங்கள்:** - **நவீன fetch API** பயன்படுத்தி தரவு அசிங்க்ரனாக்கிறது - பயனர் பெயர் களத்துடன் GET கோரிக்கை URL உருவாக்குகிறது - URL-ல் சிறப்பு எழுத்துக்களை பாதுகாப்பாக கையாள `encodeURIComponent()` ஐ செயல்படுத்துகிறது - பதிலை JSON வடிவத்துக்கு மாற்றுகிறது - பிழைகள் ஏற்படும் பட்சத்தில் பிழை பொருளை திருப்பி அனுப்புகிறது > ⚠️ **பாதுகாப்பு குறிப்பு**: `encodeURIComponent()` URL-ல் சிறப்பு எழுத்துக்களை சரியாக குறியாக்குகிறது. கடல்சார்பு தொடர்பு முறைகள் போல, இது செய்தி முறையாக தேவையானவாறு வந்துவிட உதவுகிறது, "#" மற்றும் "&" போன்ற எழுத்துக்கள் தவறாக புரியாமல் இருக்கிறது. > **ஏன் இது முக்கியம்:** - சிறப்பு எழுத்துக்களை URL உடன் பிரச்சனையில்லாமல் கையாள்கிறது - URL மாற்றல் தாக்குதல்களைத் தடுக்கும் - சரியான தரவை சர்வருக்கு அனுப்புகிறது - பாதுகாப்பான குறியீட்டான முறையை பின்பற்றுகிறது #### HTTP GET கோரிக்கைகளைப் புரிந்துகொள்ளுதல் `fetch` பயன்படுத்தும் பொழுது கூடுதலாக விருப்பங்கள் குறிப்பிடவில்லை என்றால், அது தானாகவே [`GET`](https://developer.mozilla.org/docs/Web/HTTP/Methods/GET) கோரிக்கையை உருவாக்கும். இது நமக்கு சரியானது - சர்வரை "இந்த பயனரின் கணக்கு தரவை பார்க்கலாமா?" என்று கேட்க. GET கோரிக்கைகள் நன்றாக கேள்வி எழுப்புவது போல என்பதை நிமிர்ந்தார் என்று நினைக்கவும் - உள்ளிருந்த ஒன்றை கண்காணிக்க கேட்பது. POST கோரிக்கைகள் (பதிவு செய்ய பயன்படுத்தப்பட்டது) புதியப் புத்தகத்தை நூலகத்தில் சேர்த்துக் கொள்வது போன்றது. | GET கோரிக்கை | POST கோரிக்கை | |-------------|---------------| | **நோக்கம்** | உள்ள தரவை பெறுதல் | புதிய தரவை சர்வருக்கு அனுப்புதல் | | **பராமரிப்புகள்** | URL வழியாக / கேள்வி சரம் | கோரிக்கை உட்கண்டியில் | | **கேஷிங்** | உலாவிகள் கேஷ் செய்யலாம் | பொதுவாக கேஷ் ஆகாது | | **பாதுகாப்பு** | URL/லாக்களில் தெரியும் | கோரிக்கை உட்கண்களில் மறைவு | ```mermaid sequenceDiagram participant B as Browser participant S as Server Note over B,S: GET கோரிக்கை (தரவு மீட்பு) B->>S: GET /api/accounts/test S-->>B: 200 OK + கணக்கு தரவு Note over B,S: POST கோரிக்கை (தரவு சமர்ப்பிப்பு) B->>S: POST /api/accounts + புதிய கணக்கு தரவு S-->>B: 201 உருவாக்கப்பட்டது + உறுதிப்பத்திரம் Note over B,S: பிழை கையாளல் B->>S: GET /api/accounts/nonexistent S-->>B: 404 கிடைக்கவில்லை + பிழை செய்தி ``` #### படி 3: அனைத்தையும் இணைத்தல் இப்போது இதை விரும்புகிறீர்கள் - கணக்கு தரவு பெறும் செயல்பாட்டைப் உள்நுழைவுடன் இணைக்கலாம்: ```javascript async function login() { const loginForm = document.getElementById('loginForm'); const user = loginForm.user.value; const data = await getAccount(user); if (data.error) { return console.log('loginError', data.error); } account = data; navigate('/dashboard'); } ``` இந்த செயல்பாடு தெளிவான வரிசையை பின்பற்றுகிறது: - படிவத்திலிருந்து பயனர் பெயரை எடுத்துக்கொள்கிறது - சர்வரிலிருந்து பயனரின் கணக்கு தரவை கோருகிறது - பிழைகளை கையாள்கிறது - கணக்கு தரவை சேமித்து, வெற்றி பெற்றால் டாஷ்போர்டுக்கு செல்கிறது > 🎯 **Async/Await முறை**: `getAccount` என்பது asynchronous செயல்பாடு ஆகும், அதனால் நாம் `await` சொல்லலைப் பயன்படுத்தி சர்வர் பதிலை வரும்போதுவரை காத்திருக்கிறோம். இதனால் குறியீடு வரையறையற்ற தரவுடன் தொடர்ந்து இயங்காமல் தடுக்கும். #### படி 4: உங்கள் தரவுக்கு இடம் உருவாக்குதல் தரவு தரப்ப once it’s loaded, your app needs a place to keep it handy. இதை நினைவு என கருதலாம் - தற்போதைய பயனர் தொடர்பான தகவலை எப்போதும் அணுகக்கூடிய இடமாக. இதனை உங்கள் `app.js` கோப்பின் மேல் பகுதியில் சேர்க்கவும்: ```javascript // இது தற்போதைய பயனரின் கணக்கு தரவுகளை வைத்திருக்கிறது let account = null; ``` **இதன் காரணம்:** - உங்கள் செயலியில் எங்கு வேண்டுமானாலும் கணக்கு தரவை அணுக உள்கட்டமைப்பாக உள்ளது - `null` ஆகும் போது "யாரும் இன்னும் உள்நுழையவில்லை" என்று அடையாளம் - யாரோ வெற்றிகரமாக உள்நுழைந்ததும் அல்லது பதிவு செய்ததும் புதுப்பிக்கப்படுகிறது - ஒரே உண்மையின் ஆதாரம் போல செயல்படுகிறது - யார் உள்நுழைந்தது என்பதை பற்றிய குழப்பம் இல்லாமல் #### படி 5: படிவத்தை இணைக்க இப்போது உங்கள் புதிய உள்நுழைவு செயல்பாட்டை HTML படிவத்துடன் இணைக்கலாம். உங்கள் படிவ கட்டம் இப்படிச் செய்யவும்: ```html
``` **இந்த மாற்றத்தின் விளைவுகள்:** - படிவத்தின் இயல்பான முழுப் பக்க மறுதயாரிப்பு செயல்பாட்டை நிறுத்துகிறது - உங்கள் தனிப்பயன் ஜாவாஸ்கிரிப்ட் செயல்பாட்டை அழைக்கிறது - எல்லா செயல்களும் மென்மையாகவும் ஒரே பக்கம் செயலிகளாகவும் இருக்கும் - பயனர்கள் 'உள்நுழைவு' அழுத்தும் போது அனைத்தையும் நீங்கள் முழுமையாக கட்டுப்படுத்தலாம் #### படி 6: பதிவு செயல்பாட்டை மேம்படுத்தல் ஒருமுகமான அனுபவத்திற்காக, உங்கள் `register` செயல்பாட்டையும் கணக்கு தரவை சேமித்து டாஷ்போர்டுக்கு செல்லுமாறு மேம்படுத்தவும்: ```javascript // உங்கள் பதிவு செயல்பாட்டின் இறுதியில் இந்த வரிசைகளை சேர்க்கவும் account = result; navigate('/dashboard'); ``` **இந்த மேம்பாடு அளிக்கும்:** - பதிவிலிருந்து டாஷ்போர்டுக்கு மென்மையான பயணம் - உள்நுழைவு மற்றும் பதிவு ஓட்டங்களில் ஒரே மனப்பான்மை - வெற்றிகரமான பதிவு பிறகு உடனடி கணக்கு தரவு அணுகல் #### உங்கள் செயல்பாட்டை சோதிக்கவும் ```mermaid flowchart TD A[பயனர் அங்கீகாரத் தரவுகளை உள்ளிடுகிறார்] --> B[உள்நுழைவு செயலி அழைக்கப்பட்டது] B --> C[சேவையகத்திலிருந்து கணக்கு தரவு பெறவும்] C --> D{தரவு வெற்றிகரமாக பெற்றதா?} D -->|ஆம்| E[கணக்கு தரவை உலகளாவியமாக சேமிக்கவும்] D -->|இல்லை| F[பிழை செய்தி காட்டவும்] E --> G[டாஷ்போர்டுக்கு செல்லவும்] F --> H[பயனர் உள்நுழைவு பக்கத்தில் தங்குகிறார்] ``` **சோதனை நேரம்:** 1. புதிய கணக்கை உருவாக்கி அனைத்தும் சரியாக இயங்குவதை உறுதி செய்க 2. அதே அங்கீகாரப் பொருத்தங்களுடன் உள்நுழைந்து பார்க்கவும் 3. உலாவி கண்டுபிடிப்பில் (F12) பிரச்சனைகள் இருந்தால் பாருங்கள் 4. வெற்றிகரமான உள்நுழைவுக்குப் பிறகு டாஷ்போர்டில் செல்லும் என்பதை உறுதி செய்யவும் எதுவும் வேலை செய்யவில்லையெனில் பதற்று வேண்டாம்! பெரும்பாலான பிரச்சனைகள் தட்டச்சு பிழைகள் அல்லது API சர்வரை துவக்க மறந்திருப்பதைத்தான் சேர்ந்தவை. #### குறுக்கு-தலைமை மந்திரம் பற்றி சின்ன விளக்கம் "என் வலை செயலி வேறு போர்ட்களில் ஓடும் API சர்வருடன் எப்படி பேசுகிறது?" என்று உங்களுக்கு சந்தேகம் இருக்கலாம். சிறந்த கேள்வி! இது எல்லா வலை டெவலப்பர்களும் ஒருநாள் சந்திக்கும் விஷயம். > 🔒 **குறுக்கு-தலைமை பாதுகாப்பு**: உலாவிகள் "ஒரே-தலைமை கொள்கையை" கடைபிடிக்கின்றன, வேறு டொமைன்களிடையே அனுமதியின்றி தொடர்புகளைக் தடுக்கும். பேண்டகானில் உள்ள பரிசோதனை நிலையப் போல, தொடர்பு சரிபார்க்கப்படுகிறது, பிறகு மட்டும் தரவு பரிமாற்றம் செய்ய அனுமதிக்கிறது. > **நம் அமைப்பில்:** - உங்கள் வலை செயலி `localhost:3000` (வளர்ச்சி சர்வர்) ஓடும் - API சர்வர் `localhost:5000` (பின்புற சர்வர்) ஓடும் - API சர்வர் [CORS தலைப்புகளை](https://developer.mozilla.org/docs/Web/HTTP/CORS) கொண்டுள்ளது, இது உங்கள் வலை செயலியிலிருந்து தொடர்புக்கு அனுமதி தருகிறது இந்த அமைப்பு உண்மையான உலகின் முன்னணி மற்றும் பின்புற செயலிகள் வேறுபட்ட சர்வர்களில் இயங்கும் முறையைப் பிரதிபலிக்கிறது. > 📚 **மேலும் கற்றுக்கொள்ள**: இத்துடன் முழுமையான [Microsoft Learn API க்கள் கையாளுதல் பாடத்திட்டம்](https://docs.microsoft.com/learn/modules/use-apis-discover-museum-art/?WT.mc_id=academic-77807-sagibbon) மூலம் APIs மற்றும் தரவு பெறுதலை ஆழமாக கற்றுக்கொள்ளலாம். ## HTML-இல் உங்கள் தரவை உயிர் கொடுப்பது இப்போது நாம் பெறப்பட்ட தரவை பயனர்களுக்கு DOM மாற்றத்துடன் காட்சிப் படுத்துவோம். இருண்ட அறைக்குள் புகைப்படத்தை உருவாக்கும் செயல்முறையைப் போன்றதே, மறைக்கப்பட்ட தரவை எடுத்துக் கொண்டு பயனர்களுக்கே தெரியும் மற்றும் தொடர்புகொள்ளும் ஒன்றாக மாற்றுகிறோம். DOM மாற்றம் என்பது பயனர் தொடர்புகள் மற்றும் சேவையகம் תגובות அடிப்படையில் உள்ளடக்கத்தை புதுப்பிக்கும் துன்மையற்ற வலைப் பக்கங்களை இயக்கக்கூடிய செயலிகளாக மாற்றும் தொழில் முறையே. ### வேலையைச் செய்ய சரியான கருவியை தேர்ந்தெடுத்து கொள்ளுதல் HTML ஐ JavaScript மூலம் புதுப்பிக்கும்போது, பல விருப்பங்கள் உண்டு. இவை போன்ற கருவிப்பெட்டியில் உள்ள பல கருவிகள் போல் - ஒவ்வொன்றும் குறிப்பிட்ட வேலைகளுக்கு சிறந்தது: | முறை | இது சிறந்தது எதற்காக | எப்போது பயன்படுத்துவது | பாதுகாப்பு நிலை | |--------|---------------------|----------------|--------------| | `textContent` | பயனர் தரவுகளை பாதுகாப்பாக காட்ட க்கு | நீங்கள் எப்போது எழுத்துக்களை காட்சிப்படுத்துகிறீர்கள் | ✅ மிக நirondஆமியம் | | `createElement()` + `append()` | சிக்கலான வடிவமைப்புகளை உருவாக்குதல் | புதிதாக பகுதிகள்/பட்டியல்கள் உருவாக்குகையில் | ✅ வெறும் பாதுகாப்பு | | `innerHTML` | HTML உள்ளடக்கத்தை அமைத்தல் | ⚠️ இதைத் தவிர்க்க முயலுங்கள் | ❌ ஆபத்தானது | #### எழுத்துக்களை பாதுகாப்பாக காட்டும் வழி: textContent [`textContent`](https://developer.mozilla.org/docs/Web/API/Node/textContent) சொத்தில் உங்கள் சிறந்த தோழன் பயனர் தரவுகளை காட்சிப்படுத்தும் போது. இது உங்கள் வலைப்பக்கத்திற்கு ஒரு பாதுகாவலர் போல உள்ளது - இழிவானது எதுவும் கடக்காது: ```javascript // உரையை புதுப்பிப்பதற்கான பாதுகாப்பான, நம்பகமான வழி const balanceElement = document.getElementById('balance'); balanceElement.textContent = account.balance; ``` **textContent இன் நன்மைகள்:** - எல்லாவற்றையும் சரள எழுத்துகளாக கருகுகிறது (ஸ்கிரிப்ட் செயல்பாட்டை தடுக்கும்) - தற்காலிகமாக நிலவிய உள்ளடக்கத்தை அழிக்கும் - எளிய எழுத்து புதுப்பிப்புகளுக்கு திறம்பட உள்ளது - தீய உள்ளடக்கத்திலிருந்து பாதுகாப்பை வழங்குகிறது #### இயக்கக்கூடிய HTML கூறுகளை உருவாக்குதல் மேலும் சிக்கலான உள்ளடக்கத்திற்காக, [`document.createElement()`](https://developer.mozilla.org/docs/Web/API/Document/createElement) மற்றும் [`append()`](https://developer.mozilla.org/docs/Web/API/ParentNode/append) முறைகளை இணைக்கவும்: ```javascript // புதிய உருப்படிகளை உருவாக்கும் பாதுகாப்பான வழி const transactionItem = document.createElement('div'); transactionItem.className = 'transaction-item'; transactionItem.textContent = `${transaction.date}: ${transaction.description}`; container.append(transactionItem); ``` **இந்த அணுகுமுறையை புரிந்துகொள்ளுங்கள்:** - புதிய DOM கூறுகளை நிரலாக்க உதவுகிறது - கூறின் பண்புகள் மற்றும் உள்ளடக்கம் மீது முழு கட்டுப்பாட்டை வைக்கிறது - சிக்கலான மற்றும் அட்டவணை கூறு கட்டமைப்புகளை அனுமதிக்கிறது - அமைப்பு மற்றும் உள்ளடக்கத்தை பிரித்து பாதுகாப்பை பாதுகாக்கிறது > ⚠️ **பாதுகாப்பு கவனம்**: பல பாடங்களில் [`innerHTML`](https://developer.mozilla.org/docs/Web/API/Element/innerHTML) பயன்படுத்தப்படுகிறது, ஆனால் இது உள்ளடக்கமான ஸ்கிரிப்ட்களை இயக்கலாம். CERN இன் பாதுகாப்பு செயல்முறைகள் அவ்வாறு அனுமதிக்காமல் தடுக்கும். அதேபோல் `textContent` மற்றும் `createElement` செய்வது பாதுகாப்பான மாற்றுகள் உள்ளன. > **innerHTML இன் ஆபத்துகள்:** - பயனர் தரவில் உள்ள `