# బ్యాంకింగ్ యాప్ భాగం 3: డేటా తీసుకునే మరియు ఉపయోగించే విధానాలు స్టార్ ట్రెక్లో ఎంటర్ప్రైజ్ కంప్యూటర్ గురించి ఆలోచించండి - కెప్టెన్ పికార్డ్ నౌక స్థితిని అడిగినపుడు, మొత్తం ఇంటర్ఫేస్ ఆగిపోదు, మళ్లీ తిరిగి నిర్మించబడకుండా సమాచారం వెంటనే కనిపిస్తుంది. సమాచార సమర్థవంతమైన ప్రవాహం మనం ఇక్కడ డైనమిక్ డేటా ఫెచింగ్తో నిర్మిస్తున్నదే. ప్రస్తుతం, మీ బ్యాంకింగ్ యాప్ ఒక ముద్రిత వార్తాపత్రిక లాంటిది - సమాచారంతో కూడుకున్నది కానీ స్థిరమైనది. మనం దీన్ని NASA మిషన్ కంట్రోల్ లాంటి దానిగా మార్చబోతున్నాము, అక్కడ డేటా నిరంతరం ప్రవహిస్తూ నేటివేళికిలో యూజర్ వర్క్ఫ్లోను విరామించకుండా నవీకరించబడుతుంది. మీరు ఎలా సర్వర్లతో అసంక్రోనస్గా కమ్యూనికేట్ చేయాలో, వివిధ సమయాల్లో వచ్చే డేటాను ఎలా హ్యాండిల్ చేయాలో, మరియు నడుము సమాచారాన్ని మీ యూజర్ల కోసం అర్ధవంతంగా ఎలా మార్చాలో నేర్చుకుంటారు. ఇది డెమో మరియు ప్రొడక్షన్-రెడీ సాఫ్ట్వేర్ మధ్య తేడా. ## ⚡ వచ్చే 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**: లాగిన్ను పరీక్షించి కన్సోల్లో ఖాతా డేటాను చూడండి **త్వరిత పరీక్ష ఆదేశాలు**: ```bash # API నడుస్తోందని నిర్ధారించండి curl http://localhost:5000/api # ఖాతా డేటా తీసుకోవడం పరీక్షించండి curl http://localhost:5000/api/accounts/test ``` **ఇది ఎందుకు ముఖ్యమైనది**: 5 నిమిషాల్లో మీరు ప్రతి ఆధునిక వెబ్ యాప్ను శక్తివంతం చేసే అసంక్రోనస్ డేటా ఫెчింగ్ మాయాజాలాన్ని చూడగలుగుతారు. ఇది యాప్స్ ప్రతిస్పందనશీలంగా, జీవंतంగా అనిపించే ప్రాతిపదిక. ## 🗺️ డేటా ఆధారిత వెబ్ అప్లికేషన్లలో మీ అభ్యాస ప్రయాణం ```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 ``` **మీ ప్రయాణ గమ్యం**: ఈ పాఠం చివరికి, ఆధునిక వెబ్ అప్లికేషన్లు ఎలా డేటాను తీసుకుని, ప్రాసెస్ చేసి, డైనమిక్గా ప్రదర్శిస్తాయో మీరు అర్థం చేసుకుంటారు. ఇది ప్రొఫెషనల్ అప్లికేషన్ల నుండి ఆశించే నిరంతర వినియోగదారునికి అనుభవాలను సృష్టిస్తుంది. ## పాఠం ముందు క్విజ్ [పాఠం ముందు క్విజ్](https://ff-quizzes.netlify.app/web/quiz/45) ### ముందు అవసరాలు డేటా తీసుకోవడం మొదలుపెట్టేముందు, ఈ భాగాలు సిద్ధంగా ఉన్నాయని ధృవీకరించండి: - **మునుపటి పాఠం**: [లాగిన్ మరియు రిజిస్ట్రేషన్ ఫారం](../2-forms/README.md) పూర్తి చేయండి – దీనిపై మనం నిర్మించబోతున్నాము - **లోకల్ సర్వర్**: [Node.js](https://nodejs.org) ని ఇంస్టాల్ చేసి API సర్వర్ను నడిపించండి ([run the server 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 ఫారం ధ్రువీకరణ క్రెడెన్షియల్ ధృవీకరణ సెషన్ నిర్వహణ User State గ్లోబల్ ఖాతా వస్తువు నావిగేషన్ గార్డులు లోపం నిర్వహణ API Communication Fetch Patterns GET అభ్యర్థనలు POST అభ్యర్థనలు లోపం ప్రతిస్పందనలు Data Formats JSON ప్రాసెసింగ్ URL ఎంకోడింగ్ ప్రతిస్పందన పార్సింగ్ Dynamic UI Updates DOM Manipulation సురక్షిత టెక్స్ట్ నవీకరణలు మూలకం సృష్టి టెంప్లేట్ క్లోनింగ్ User Experience నిజ కాలం నవీకరణలు లోపం సందేశాలు లోడ్ అవుతున్న స్థితులు Security Considerations XSS Prevention textContent ఉపయోగం ఇన్పుట్ శుభ్రం చేయడం సురక్షిత HTML సృష్టి CORS Handling క్రాస్-ఓరిజిన్ అభ్యర్థనలు హెడ్డర్ ఆకృతీకరణ అభివృద్ధి సెటప్ ``` **మూల సూత్రం**: ఆధునిక వెబ్ అప్లికేషన్లు డేటా ఆర్కెస్ట్రేషన్ సిస్టమ్స్ - అవి యూజర్ ఇంటర్ఫేస్లు, సర్వర్ 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: కొత్త పేజీ చూపిస్తుంది (ఫ్లాష్/పునఃప్రారంభం) ```  **ఈ విధానం ఎందుకు స్తంభించేంది:** - ప్రతి క్లిక్ అంటే పూర్తిగా పేజీని తిరిగి నిర్మించటం - యూజర్లు ఆలోచన మధ్యలో ఆపివేయబడటంతో ఉండటపు సమస్యలు - ఒకే హెడ్డర్, ఫుటర్ మళ్లీ మళ్లీ డౌన్లోడ్ చేయడం వల్ల ఇంటర్నెట్ కనెక్షన్ పై భారము - యాప్స్ సాఫ్ట్వేర్ కాకుండా ఫైలింగ్ కేబినెట్లో క్లిక్ చేస్తున్నట్లు అనిపించడం ### ఆధునిక సింగిల్ పేజ్ అప్లికేషన్లు (SPA) AJAX (Asynchronous JavaScript and XML) ఈ పద్ధతిని పూర్తిగా మార్చింది. అంతర్జాతీయ అంతరిక్ష స్టేషన్ యొక్క మాడ్యులర్ డిజైన్ లాంటి, ఇక్కడ వ్యోమగాములు ప్రత్యేక భాగాలను మార్చగలరు, పూర్తీ నిర్మాణాన్ని క్లీన్ చేయకుండా, AJAX ఈ విధంగా పేజీని reload చేయకుండా కొన్ని భాగాలను మాత్రమే నవీకరించ permits చేస్తుంది. 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: నవీకరించబడిన కంటెంట్ చూపుతుంది (రిలోడ్ లేదు) ```  **SPAs ఎందుకు చాలా మెరుగ్గా అనిపిస్తాయో:** - మార్చిన భాగాలే నవీకరించబడతాయి (సంSMARTగా!) - యూజర్లు వారి ప్రవాహంలో విఫలమవరు - తక్కువ డేటా ప్రయాణించే కారణంగా వేగంగా లోడ్ అవుతాయి - ఫోన్లలో ఉన్న యాప్స్ లాంటి నిమిషాల అనుభూతి ### ఆధునిక 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 promises ఉపయోగించి శుభ్రంగా అసంక్రోనస్ కోడ్ రాయటం సులభం చేస్తుంది మరియు JSON సహజంగా హ్యాండిల్ చేస్తుంది. | లక్షణం | XMLHttpRequest | Fetch API | |---------|----------------|----------| | **సింటాక్స్** | క్లిష్టమైన కాల్బ్యాక్ ఆధారిత | శుభ్రమైన promise-ఆధారిత | | **JSON నిర్వహణ** | మాన్యువల్ పార్సింగ్ అవసరం | అంతర్నిర్మిత `.json()` మెథడ్ | | **పరువు నిర్వహణ** | పరిమిత తప్పు సమాచారం | విపులమైన తప్పుల వివరాలు | | **ఆధునిక మద్దతు** | లెగసీ కంపాటిబిలిటీ | ES6+ promises మరియు 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` పదం JavaScriptకు "ఈ ఫంక్షన్ దేవ్ వేటింగ్ అవసరమవచ్చు" అని చెపుతుంది - పేజీ నుండి ఫారమ్ను పొందుతాము (ఇది ID ద్వారా సులభంగా) - యూజర్ టైప్ చేసిన యూజర్నేమ్ను తీసుకుంటాము - ఒక చక్కటి ట్రిక్: మీరు ఫారం ఇన్పుట్ని దాని `name` అట్రిబ్యూట్ ద్వారా యాక్సెస్ చేయవచ్చు - getElementById లాంటిది కాకుండా! > 💡 **ఫారం యాక్సెస్ పద్ధతి**: ప్రతి ఫారం నియంత్రణాని దాని 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తో డేటాను అసంక్రోనస్ గా అభ్యర్థిస్తుంది - `username` పారామీటర్తో GET రిక్వెస్ట్ URL ను రూపొందిస్తుంది - URLలలో ప్రత్యేక అక్షరాలను సురక్షితంగా నిర్వహించడానికి `encodeURIComponent()` ఉపయోగిస్తుంది - ప్రతిస్పందనను JSON గా మార్చుతుంది, డేటా పద్ధతి సులభం చెయ్యడానికి - పొరపాట్లను మనోహరంగా (crash కాకుండా) error objectతో హ్యాండిల్ చేస్తుంది > ⚠️ **భద్రతా సూత్రం**: `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` ఒక అసంక్రోనస్ ఫంక్షన్ కావడం వల్ల, మనం `await` పదాన్ని వాడి సర్వర్ స్పందన కోసం వేచుచూస్తాం. ఇది తప్పనిసరిగా నిర్వచించని డేటాతో కోడ్ కొనసాగకుండా చేస్తుంది. #### దశ 4: డేటా నిల్వలో స్థలం సృష్టించడం మీ యాప్ ఒకసారి డేటాను తీసుకున్న తర్వాత దీనిని జ్ఞాపకంగా ఉంచాలి. ఇది యాప్ యొక్క క్షుణ్ణ స్మృతి లాంటిది – ప్రస్తుత యూజర్ డేటాను యాప్ ఎక్కడైన సులభంగా యాక్సెస్ చేయ గలగడం. `app.js` ఫైల్ యొక్క ప్రారంభంలో ఈ లైన్ జోడించండి: ```javascript // ఇది ప్రస్తుత వినియోగదారుని ఖాతా సమాచారం నిల్వ చేస్తుంది let account = null; ``` **దీని అవసరం:** - ఖాతా డేటాను యాప్ ఏ భాగం నుండైనా యాక్సెస్ చేయడానికీ ఉంచుతుంది - `null`తో మొదలవడం అంటే "ఎవరూ లాగిన్ కాలేదు" - ఎవరు విజయం సంపాదిస్తే వారి డేటాను అప్డేట్ చేస్తుంది - ఒక ఏకైక నిజసూచన వనరుగా ఉంటుంది – ఎవరు లాగిన్ అయ్యారో స్పష్టంగా అర్థం కావడం #### దశ 5: మీ ఫారమ్ లింక్ చేయడం ఇప్పుడు మీ కొత్త లాగిన్ ఫంక్షన్ను HTML ఫారమ్తో కనెక్ట్ చేద్దాం. ఫారమ్ ట్యాగ్ ఈ విధంగా నవీకరించండి: ```html
``` **ఈ చిన్న మార్పు ఏమి చేస్తుందో:** - ఫారం తన డిఫాల్ట్ మొత్తం పేజీ రీలోడ్ అవ్వుటను ఆపుతుంది - మీ కస్టమ్ JavaScript ఫంక్షన్ను పిలుస్తుంది - జీవంతమైన సింగిల్ పేజ్ యాప్ అనుభవాన్ని కలిగిస్తుంది - యూజర్లు "లాగిన్" నొక్కినప్పుడు పూర్తి నియంత్రణ మీ చేతుల్లో ఉంటుంది #### దశ 6: రిజిస్ట్రేషన్ ఫంక్షన్ మెరుగు పరచటం సమగ్రత కోసం, మీరు `register` ఫంక్షన్ను కూడా అప్డేట్ చేసి ఖాతా డేటాను నిల్వ చేసేలా, డాష్బోర్డ్కు మారేలా చేయండి: ```javascript // మీ register ఫంక్షన్ చివరకి ఈ లైన్స్ జతచేయండి account = result; navigate('/dashboard'); ``` **ఈ మెరుగుదల అందించే విలువ:** - రిజిస్ట్రేషన్ తర్వాత డాష్బోర్డ్కు సజావుగా మారడం - లాగిన్ మరియు రిజిస్ట్రేషన్ మధ్య అనుసంధానం కలిగి ఉండటం - విజయవంతమైన రిజిస్ట్రేషన్ వెంటనే ఖాతా డేటా యాక్సెస్ #### మీ అమలును పరీక్షించడం ```mermaid flowchart TD A[వినియోగదారు సర్టిఫికెట్లు నమోదు చేస్తాడు] --> B[లాగిన్ ఫంక్షన్ పిలవబడింది] B --> C[సర్వర్ నుండి ఖాతా డేటా తీసుకోవడం] C --> D{డేటా విజయవంతంగా అందిందా?} D -->|Yes| E[ఖాతా డేటాను గ్లోబల్గా నిల్వ చేయండి] D -->|No| 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)తో మీ వెబ్ యాప్ నుండి కమ్యూనికేషన్కు స్పష్టంగా అనుమతి ఇస్తుంది ఇది వాస్తవ ప్రపంచ అభివృద్ధిలో సాధారణం – ఫ్రంట్ఎండ్ మరియు బ్యాక్ఎండ్ అప్లికేషన్లు సాధారణంగా వేరే సర్వర్లపై నడుస్తాయి. > 📚 **ఇంకా తెలుసుకోండి**: APIs మరియు డేటా ఫెచింగ్ పై మరింత లోతుగా తెలుసుకోవడానికి ఈ పూర్తి [Microsoft Learn మాడ్యూల్](https://docs.microsoft.com/learn/modules/use-apis-discover-museum-art/?WT.mc_id=academic-77807-sagibbon) చూడండి. ## మీ డేటాను HTMLలో జీవంతంగా చూపించడం ఇప్పుడు మనం తీసుకున్న డేటాను వినియోగదారులకు DOM మానిప్యులేషన్ ద్వారా కనిపించేలా చేస్తాము. డార్క్రూమ్లో ఫోటోల అభివృద్ధి లాగానే, కనిపించని డేటాను చూసేలా, ఇంటర్ఫేస్ తో వినియోగదారులను అనుసంధానం చేసేలా తీర్చిదిద్దుతున్నాము. DOM మానిప్యులేషన్ అనేది స్థిరమైన వెబ్ పేజీలను డైనమిక్ అప్లికేషన్లుగా మార్చే సాంకేతికత, ఇది వినియోగదారుల పరస్పర చర్యలు మరియు సర్వర్ స్పందనల ఆధారంగా వారి కంటెంట్ను నవీకరిస్తుంది. ### పని కోసం సరైన సాధనాన్ని ఎంచుకోవడం మీ HTML ను JavaScript తో నవీకరించడంలో, మీ వద్ద అనేక ఎంపికలున్నాయి. ఇవి టూల్ బాక్స్లోని విభిన్న ఉపకరణాలంటి భావించండి - ప్రతి ఒకటి నిర్దిష్ట పనులకు పరిపూర్ణంగా ఉంటుంది: | విధానం | ఇది ఏమి బాగుంటుంది | ఎప్పుడు ఉపయోగించాలి | భద్రత స్థాయి | |--------|---------------------|----------------|--------------| | `textContent` | వినియోగదారు డేటాని సురక్షితంగా ప్రదర్శించడం | మీరు ఎప్పుడైనా టెక్స్ట్ చూపించేటప్పుడు | ✅ బలమైన భద్రత | | `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 ప్రమాదాలు:** - వినియోగదారు డేటాలో `