# வங்கி பயன்பாட்டை உருவாக்குதல் பகுதி 3: தரவுகளை பெறுதல் மற்றும் பயன்படுத்துதல் ## முன்-வகுப்பு வினாடி வினா [முன்-வகுப்பு வினாடி வினா](https://ff-quizzes.netlify.app/web/quiz/45) ### அறிமுகம் ஒவ்வொரு வலை பயன்பாட்டின் மையத்தில் *தரவு* உள்ளது. தரவுகள் பல வடிவங்களில் இருக்கலாம், ஆனால் அவற்றின் முக்கிய நோக்கம் பயனாளருக்கு தகவல்களை காட்டுவதாகும். வலை பயன்பாடுகள் அதிகமாக இடையூறு இல்லாமல் மற்றும் சிக்கலானதாக மாறுவதால், பயனர் தகவல்களை அணுகுவது மற்றும் தொடர்பு கொள்ளுவது தற்போது வலை வளர்ச்சியின் முக்கிய பகுதியாக உள்ளது. இந்த பாடத்தில், சர்வரில் இருந்து தரவுகளை அசிங்கமாக பெறுவது மற்றும் HTML ஐ மீண்டும் ஏற்றாமல் வலைப்பக்கத்தில் தகவல்களை காட்ட இந்த தரவுகளை பயன்படுத்துவது எப்படி என்பதை காண்போம். ### முன்-தரப்பு இந்த பாடத்திற்காக நீங்கள் [உள்நுழைவு மற்றும் பதிவு படிவம்](../2-forms/README.md) பகுதியை உருவாக்கியிருக்க வேண்டும். மேலும், [Node.js](https://nodejs.org) ஐ நிறுவி [சர்வர் API ஐ இயக்க](../api/README.md) வேண்டும், இதனால் நீங்கள் கணக்கு தரவுகளை பெற முடியும். சர்வர் சரியாக இயங்குகிறதா என்பதை சரிபார்க்க, டெர்மினலில் இந்த கட்டளையை இயக்கவும்: ```sh curl http://localhost:5000/api # -> should return "Bank API v1.0.0" as a result ``` --- ## AJAX மற்றும் தரவுகளை பெறுதல் சாதாரண வலைத்தளங்கள், பயனர் ஒரு இணைப்பை தேர்ந்தெடுக்கும்போது அல்லது ஒரு படிவத்தை சமர்ப்பிக்கும்போது, முழு HTML பக்கத்தை மீண்டும் ஏற்றுவதன் மூலம் காட்டப்படும் உள்ளடக்கத்தை புதுப்பிக்கின்றன. புதிய தரவுகள் ஏற்றப்பட வேண்டிய ஒவ்வொரு முறையும், வலை சர்வர் ஒரு புதிய HTML பக்கத்தை திருப்பி அனுப்புகிறது, இது உலாவியில் செயல்படுத்தப்பட வேண்டும், தற்போதைய பயனர் செயல்பாட்டை தடை செய்கிறது மற்றும் ஏற்றுமதி நேரத்தில் தொடர்புகளை வரையறுக்கிறது. இந்த வேலைப்போக்கு *பல பக்க பயன்பாடு* அல்லது *MPA* என்று அழைக்கப்படுகிறது.  வலை பயன்பாடுகள் அதிகமாக சிக்கலான மற்றும் இடையூறு இல்லாததாக மாறியபோது, [AJAX (Asynchronous JavaScript and XML)](https://en.wikipedia.org/wiki/Ajax_(programming)) என்ற புதிய தொழில்நுட்பம் உருவானது. இந்த தொழில்நுட்பம், HTML பக்கத்தை மீண்டும் ஏற்றாமல், JavaScript ஐப் பயன்படுத்தி சர்வரில் இருந்து தரவுகளை அசிங்கமாக அனுப்பவும் பெறவும் அனுமதிக்கிறது, இது வேகமான புதுப்பிப்புகள் மற்றும் மென்மையான பயனர் தொடர்புகளை உருவாக்குகிறது. சர்வரில் இருந்து புதிய தரவுகள் பெறப்பட்டவுடன், தற்போதைய HTML பக்கம் [DOM](https://developer.mozilla.org/docs/Web/API/Document_Object_Model) API ஐப் பயன்படுத்தி JavaScript மூலம் புதுப்பிக்கப்படலாம். காலப்போக்கில், இந்த அணுகுமுறை [*ஒரு பக்க பயன்பாடு* அல்லது *SPA*](https://en.wikipedia.org/wiki/Single-page_application) என்று அழைக்கப்படும் முறையாக உருவாகியுள்ளது.  AJAX முதலில் அறிமுகப்படுத்தப்பட்ட போது, தரவுகளை அசிங்கமாக பெறுவதற்கான ஒரே API [`XMLHttpRequest`](https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest) இருந்தது. ஆனால் நவீன உலாவிகள் [`Fetch` API](https://developer.mozilla.org/docs/Web/API/Fetch_API) ஐ செயல்படுத்துகின்றன, இது வாக்குறுதிகளைப் பயன்படுத்துகிறது மற்றும் JSON தரவுகளை மாற்றுவதற்கு சிறந்தது. > அனைத்து நவீன உலாவிகளும் `Fetch API` ஐ ஆதரிக்கின்றன, ஆனால் உங்கள் வலை பயன்பாடு பழமையான அல்லது பழைய உலாவிகளில் வேலை செய்ய வேண்டும் என்றால், [caniuse.com இல் இணக்கத்தன்மை அட்டவணையை](https://caniuse.com/fetch) முதலில் சரிபார்ப்பது நல்லது. ### பணிகள் [முந்தைய பாடத்தில்](../2-forms/README.md) கணக்கை உருவாக்க பதிவு படிவத்தை செயல்படுத்தினோம். இப்போது, ஒரு கணக்கைப் பயன்படுத்தி உள்நுழையவும், அதன் தரவுகளைப் பெறவும் குறியீட்டைச் சேர்ப்போம். `app.js` கோப்பைத் திறந்து புதிய `login` செயல்பாட்டைச் சேர்க்கவும்: ```js async function login() { const loginForm = document.getElementById('loginForm') const user = loginForm.user.value; } ``` இங்கு, `getElementById()` மூலம் படிவ உருப்படியை பெறுவதில் தொடங்குகிறோம், பின்னர் `loginForm.user.value` மூலம் உள்ளீட்டில் இருந்து பயனர் பெயரைப் பெறுகிறோம். ஒவ்வொரு படிவ கட்டுப்பாடும் அதன் பெயரால் (HTML இல் `name` பண்பை அமைத்தல்) படிவத்தின் ஒரு சொத்தாக அணுகப்படலாம். பதிவுக்கான செயல்பாட்டில் செய்ததைப் போலவே, கணக்கு தரவுகளைப் பெறுவதற்கான சர்வர் கோரிக்கையைச் செய்ய மற்றொரு செயல்பாட்டை உருவாக்குவோம்: ```js 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 ஐப் பயன்படுத்துகிறோம், ஆனால் இந்த முறை, நாம் தரவுகளை மட்டும் கேட்கிறோம் என்பதால், URL தவிர எந்த கூடுதல் அளவுருக்களும் தேவையில்லை. இயல்பாக, `fetch` ஒரு [`GET`](https://developer.mozilla.org/docs/Web/HTTP/Methods/GET) HTTP கோரிக்கையை உருவாக்குகிறது, இது இங்கு தேவைப்படும் ஒன்று. ✅ `encodeURIComponent()` என்பது URL க்கான சிறப்பு எழுத்துக்களை தப்பிக்கச் செய்யும் ஒரு செயல்பாடாகும். `user` மதிப்பை URL இல் நேரடியாக பயன்படுத்தி இந்த செயல்பாட்டை அழைக்காமல் இருந்தால் என்ன பிரச்சினைகள் ஏற்படலாம்? இப்போது `login` செயல்பாட்டை `getAccount` ஐப் பயன்படுத்த புதுப்பிப்போம்: ```js 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'); } ``` முதலில், `getAccount` என்பது ஒரு அசிங்கமான செயல்பாடாக இருப்பதால், சர்வர் முடிவுக்காக காத்திருக்க `await` விசைப்பொறியைப் பொருத்த வேண்டும். எந்த சர்வர் கோரிக்கையிலும், பிழை நிலைகளை கையாளவும் வேண்டும். தற்போது, பிழையை காட்ட ஒரு பதிவு செய்தியை மட்டும் சேர்ப்போம், பின்னர் அதில் திரும்புவோம். பின்னர், டாஷ்போர்டு தகவல்களை காட்டுவதற்கு பின்னர் பயன்படுத்த கணக்கு தரவுகளை எங்காவது சேமிக்க வேண்டும். `account` மாறி இன்னும் இல்லை என்பதால், கோப்பின் மேல் ஒரு உலகளாவிய மாறியை உருவாக்குவோம்: ```js let account = null; ``` பயனர் தரவுகள் ஒரு மாறியில் சேமிக்கப்பட்ட பிறகு, *login* பக்கத்திலிருந்து *dashboard* க்கு `navigate()` செயல்பாட்டைப் பயன்படுத்தி செல்லலாம். இறுதியாக, login படிவம் சமர்ப்பிக்கப்பட்டால், `login` செயல்பாட்டை அழைக்க HTML ஐ மாற்ற வேண்டும்: ```html