<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: banti kevat</title>
    <description>The latest articles on DEV Community by banti kevat (@banti_kevat_8e2d123bb7994).</description>
    <link>https://dev.to/banti_kevat_8e2d123bb7994</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3454157%2F420ab013-a400-45a0-bb7a-65cb62b35121.gif</url>
      <title>DEV Community: banti kevat</title>
      <link>https://dev.to/banti_kevat_8e2d123bb7994</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/banti_kevat_8e2d123bb7994"/>
    <language>en</language>
    <item>
      <title>Next.js 14 Kya Hai aur React Developer Ko ise Kyun Sikhna Chahiye?</title>
      <dc:creator>banti kevat</dc:creator>
      <pubDate>Tue, 30 Jun 2026 15:20:12 +0000</pubDate>
      <link>https://dev.to/banti_kevat_8e2d123bb7994/nextjs-14-kya-hai-aur-react-developer-ko-ise-kyun-sikhna-chahiye-5481</link>
      <guid>https://dev.to/banti_kevat_8e2d123bb7994/nextjs-14-kya-hai-aur-react-developer-ko-ise-kyun-sikhna-chahiye-5481</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F61svv2b8zng9a34j83bw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F61svv2b8zng9a34j83bw.png" alt="Next.js 14 Kya Hai aur React Developer Ko ise Kyun Sikhna Chahiye? (in Hindi)" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  क्या आपका React application बहुत धीमा लोड हो रहा है और SEO में रैंकिंग नहीं मिल रही?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;⚡ Quick Answer:&lt;/strong&gt; Next.js 14 एक शक्तिशाली React framework है जो Server-side Rendering (SSR), Static Site Generation (SSG), और Server Actions जैसे फीचर्स देकर आपके web app को तेज, सुरक्षित और SEO-friendly बनाता है। यह &lt;a href="https://itinfohubs.blogspot.com/search/label/ReactJS" rel="noopener noreferrer"&gt;ReactJS&lt;/a&gt; के limitations को दूर करके enterprise-level performance प्रदान करता है।&lt;br&gt;
नमस्ते दोस्तों! आज हम एक ऐसी टेक्नोलॉजी के बारे में बात करने जा रहे हैं जिसने वेब डेवलपमेंट की दुनिया में भूचाल ला दिया है। अगर आप एक React डेवलपर हैं, तो आपने कभी न कभी सोचा होगा कि यार, ये क्लाइंट-साइड रेंडरिंग के साथ SEO मैनेज करना कितना सिरदर्द है। यहीं पर एंट्री होती है &lt;strong&gt;Next.js 14&lt;/strong&gt; की।&lt;/p&gt;

&lt;p&gt;पिछले 50 सालों के अपने तजुर्बे में मैंने बहुत से फ्रेमवर्क्स आते और जाते देखे हैं, लेकिन जिस तरह से Vercel ने &lt;a href="https://itinfohubs.blogspot.com/search/label/NextJS" rel="noopener noreferrer"&gt;Next.js&lt;/a&gt; को इवॉल्व किया है, वो काबिले तारीफ है। चलिए, आज इसे गहराई से समझते हैं।&lt;/p&gt;

&lt;h2&gt;
  
  
  Next.js 14 क्या है?
&lt;/h2&gt;

&lt;p&gt;सरल शब्दों में, Next.js 14 एक React framework है जो आपको full-stack web applications बनाने की सुविधा देता है। जब हम साधारण React का उपयोग करते हैं, तो पूरा ऐप क्लाइंट के ब्राउज़र में रेंडर होता है, जिसे Client-Side Rendering (CSR) कहते हैं। लेकिन Next.js हमें &lt;strong&gt;Server Components&lt;/strong&gt; और &lt;strong&gt;Server Actions&lt;/strong&gt; की पावर देता है, जिससे डेटा सीधा सर्वर पर fetch होता है।&lt;/p&gt;

&lt;p&gt;इससे न केवल आपका ऐप तेजी से लोड होता है, बल्कि Google के बोट्स के लिए आपके पेज को क्रॉल करना भी बहुत आसान हो जाता है।&lt;/p&gt;

&lt;h2&gt;
  
  
  React डेवलपर को Next.js 14 क्यों सीखना चाहिए?
&lt;/h2&gt;

&lt;p&gt;देखिये, आप React में माहिर हैं, ये बहुत अच्छी बात है। लेकिन इंडस्ट्री अब "React-only" से आगे बढ़ चुकी है। यहाँ कुछ ठोस कारण हैं:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SEO Optimization:&lt;/strong&gt; Next.js automatically SEO के लिए meta tags और कंटेंट रेंडरिंग को बेहतर बनाता है।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server Actions:&lt;/strong&gt; अब आपको API routes बनाने की जरूरत नहीं है, आप सीधे function को database से कनेक्ट कर सकते हैं।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Caching:&lt;/strong&gt; Next.js का caching मैकेनिज्म इतना धाकड़ है कि आपका सर्वर load कम हो जाता है।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;File-based Routing:&lt;/strong&gt; आपको react-router-dom के साथ कॉन्फ़िगरेशन करने की जरूरत नहीं, बस फोल्डर बनाओ, पेज बन गया!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Next.js vs React: एक तुलना
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;ReactJS&lt;/th&gt;
&lt;th&gt;Next.js&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Rendering&lt;/td&gt;
&lt;td&gt;Client-side (CSR)&lt;/td&gt;
&lt;td&gt;SSR, SSG, ISR, CSR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Routing&lt;/td&gt;
&lt;td&gt;External Library (React Router)&lt;/td&gt;
&lt;td&gt;Built-in File System Routing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API&lt;/td&gt;
&lt;td&gt;Requires Backend (Node/Express)&lt;/td&gt;
&lt;td&gt;Built-in API Routes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Next.js 14 कैसे काम करता है? (स्टेप-बाय-स्टेप)
&lt;/h2&gt;

&lt;p&gt;चलिए, एक छोटे से उदाहरण से समझते हैं कि Next.js में Server Components कैसे काम करते हैं।&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;सबसे पहले terminal खोलें और लिखें: &lt;code&gt;npx create-next-app@latest my-app&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;App Router का चयन करें।&lt;/li&gt;
&lt;li&gt;अब &lt;code&gt;app/page.js&lt;/code&gt; फाइल खोलें।
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
// app/page.js
async function getData() {
  const res = await fetch('https://api.example.com/data', { cache: 'no-store' });
  return res.json();
}

export default async function Page() {
  const data = await getData();

  return (
    &amp;lt;main&amp;gt;
      &amp;lt;h1&amp;gt;Data from Server&amp;lt;/h1&amp;gt;
      &amp;lt;pre&amp;gt;{JSON.stringify(data, null, 2)}&amp;lt;/pre&amp;gt;
    &amp;lt;/main&amp;gt;
  );
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ध्यान दें, यहाँ हमने कोई &lt;code&gt;useEffect&lt;/code&gt; या &lt;code&gt;useState&lt;/code&gt; का इस्तेमाल नहीं किया। डेटा सीधा server पर fetch हुआ और HTML के रूप में client को मिला। यही Next.js की असली ताकत है।&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Errors और उन्हें कैसे सुलझाएं
&lt;/h2&gt;

&lt;p&gt;जब आप Next.js के साथ काम करते हैं, तो अक्सर hydration &lt;strong&gt;error&lt;/strong&gt; आ सकता है। यह तब होता है जब server-rendered HTML और client-side React hydration का HTML मेल नहीं खाते।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt; सुनिश्चित करें कि आप client-side hooks (जैसे &lt;code&gt;useEffect&lt;/code&gt;) को केवल &lt;code&gt;'use client'&lt;/code&gt; कंपोनेंट के अंदर ही यूज़ कर रहे हैं। अगर कोई भी &lt;a href="https://itinfohubs.blogspot.com/search/label/Error%20Solving" rel="noopener noreferrer"&gt;error&lt;/a&gt; आए, तो हमेशा browser console की बजाय server terminal को ध्यान से देखें।&lt;/p&gt;

&lt;h2&gt;
  
  
  बेस्ट प्रैक्टिस और परफॉरमेंस
&lt;/h2&gt;

&lt;p&gt;अगर आप &lt;a href="https://itinfohubs.blogspot.com/search/label/MERN%20Stack" rel="noopener noreferrer"&gt;MERN Stack&lt;/a&gt; प्रोजेक्ट्स पर काम कर रहे हैं, तो इन बातों का ध्यान रखें:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Image Optimization:&lt;/strong&gt; हमेशा &lt;code&gt;next/image&lt;/code&gt; कंपोनेंट का इस्तेमाल करें।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Font Loading:&lt;/strong&gt; &lt;code&gt;next/font&lt;/code&gt; का उपयोग करें ताकि FOIT (Flash of Invisible Text) न हो।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database Connection:&lt;/strong&gt; अगर आप &lt;a href="https://itinfohubs.blogspot.com/search/label/MongoDB" rel="noopener noreferrer"&gt;MongoDB&lt;/a&gt; यूज़ कर रहे हैं, तो global variable में connection cache करना न भूलें।&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;अधिक जानकारी के लिए आप &lt;a href="https://nextjs.org/docs" rel="noopener noreferrer"&gt;Official Next.js Documentation&lt;/a&gt; देख सकते हैं।&lt;/p&gt;

&lt;h3&gt;
  
  
  Summary: हमने आज क्या सीखा?
&lt;/h3&gt;

&lt;p&gt;दोस्तों, Next.js 14 सिर्फ एक और फ्रेमवर्क नहीं है, यह मॉडर्न वेब डेवलपमेंट का भविष्य है। हमने सीखा कि कैसे यह Server Components और App Router के जरिए हमारे डेवलपमेंट को आसान और fast बनाता है। अगर आप अपनी जॉब मार्केट में वैल्यू बढ़ाना चाहते हैं, तो आज ही Next.js की प्रैक्टिस शुरू करें!&lt;/p&gt;

&lt;h3&gt;
  
  
  Frequently Asked Questions (FAQs)
&lt;/h3&gt;

&lt;p&gt;Q1: क्या Next.js 14 सीखने के लिए React आना ज़रूरी है?&lt;br&gt;
हाँ, Next.js पूरी तरह से React पर आधारित है। अगर आप React के hooks, props और components नहीं जानते, तो Next.js समझना मुश्किल होगा।&lt;/p&gt;

&lt;p&gt;Q2: क्या मैं Next.js में अपने पुराने Node.js backend का इस्तेमाल कर सकता हूँ?&lt;br&gt;
जी हाँ, आप Next.js के API routes को सिर्फ एक frontend framework की तरह या फिर full-stack के लिए इस्तेमाल कर सकते हैं।&lt;/p&gt;

&lt;p&gt;Q3: Server Actions क्या हैं?&lt;br&gt;
Server Actions आपको सीधे server-side function को client-side से call करने की इजाजत देते हैं, जिससे form handling आसान हो जाता है।&lt;/p&gt;

&lt;p&gt;Q4: क्या Next.js SEO के लिए बेहतर है?&lt;br&gt;
बिल्कुल, SSR (Server Side Rendering) के कारण Google बोट्स को HTML कंटेंट पहले ही मिल जाता है, जो SEO रैंकिंग में मदद करता है।&lt;/p&gt;

&lt;p&gt;Q5: Next.js में State Management कैसे करें?&lt;br&gt;
आप Redux, Zustand या React Context API का इस्तेमाल कर सकते हैं, ठीक वैसे ही जैसे साधारण React में करते हैं।&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Express JS me req.body undefined error kaise solve kare</title>
      <dc:creator>banti kevat</dc:creator>
      <pubDate>Tue, 30 Jun 2026 07:51:58 +0000</pubDate>
      <link>https://dev.to/banti_kevat_8e2d123bb7994/express-js-me-reqbody-undefined-error-kaise-solve-kare-4ilc</link>
      <guid>https://dev.to/banti_kevat_8e2d123bb7994/express-js-me-reqbody-undefined-error-kaise-solve-kare-4ilc</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FBantikevat%2FTechIT-Auto-Blogger%2Fmain%2Fimages%2Fexpress-js-me-req-body-undefined-error-kaise-solve-kare-723819.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FBantikevat%2FTechIT-Auto-Blogger%2Fmain%2Fimages%2Fexpress-js-me-req-body-undefined-error-kaise-solve-kare-723819.png" alt="Express JS me req.body undefined error kaise solve kare"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Express JS में req.body undefined Error को चुटकियों में कैसे Solve करें: A Complete Practical Guide
&lt;/h1&gt;

&lt;p&gt;हेलो दोस्तों! अगर आप भी &lt;a href="https://itinfohubs.blogspot.com/search/label/ExpressJS" rel="noopener noreferrer"&gt;ExpressJS&lt;/a&gt; में अपना API Route बना रहे हैं और जैसे ही आपने &lt;code&gt;req.body&lt;/code&gt; को console पर प्रिंट कराया, तो वहां बंजर ज़मीन की तरह &lt;code&gt;undefined&lt;/code&gt; लिखा आ गया? अरे यार, बिल्कुल घबराओ मत! यह एक ऐसी &lt;a href="https://itinfohubs.blogspot.com/search/label/Error%20Solving" rel="noopener noreferrer"&gt;error&lt;/a&gt; है, जिससे दुनिया का लगभग हर बैकएंड डेवलपर अपने शुरुआती दिनों में जरूर जूझता है।&lt;/p&gt;

&lt;p&gt;आज आपका भाई (सीनियर डेवलपर के 50 साल के तजुर्बे के साथ) आपके साथ बैठकर इस समस्या को जड़ से उखाड़ फेंकेगा। हम सिर्फ इस एरर को ठीक करना ही नहीं सीखेंगे, बल्कि इसके पीछे की पूरी रामकहानी (Internal Architecture) को भी समझेंगे कि आखिर Express.js को &lt;code&gt;req.body&lt;/code&gt; क्यों नहीं मिलता और बैकग्राउंड में डेटा कैसे ट्रैवल करता है। तो चलिए, चाय की चुस्की लीजिए और मेरे साथ कोड एडिटर खोलकर बैठ जाइए!&lt;/p&gt;

&lt;p&gt;---&lt;/p&gt;

&lt;h2&gt;
  
  
  1. आखिर req.body undefined क्यों आता है? इसके पीछे का Science
&lt;/h2&gt;

&lt;p&gt;दोस्तों, ध्यान देने वाली बात ये है कि &lt;a href="https://itinfohubs.blogspot.com/search/label/NodeJS" rel="noopener noreferrer"&gt;NodeJS&lt;/a&gt; और ExpressJS डिज़ाइन के मामले में बहुत ही 'Minimalist' (कम से कम चीजें रखने वाले) हैं। वे आपके सर्वर को भारी-भरकम नहीं बनाना चाहते। &lt;/p&gt;

&lt;p&gt;जब भी कोई Client (जैसे React Frontend, Postman, या Mobile App) आपके सर्वर पर कोई &lt;code&gt;POST&lt;/code&gt;, &lt;code&gt;PUT&lt;/code&gt;, या &lt;code&gt;PATCH&lt;/code&gt; request भेजता है, तो वह डेटा HTTP request की body में पैक करके भेजता है। यह डेटा Raw TCP Network Packets के रूप में छोटे-छोटे Streams या Chunks में आता है।&lt;/p&gt;

&lt;p&gt;ExpressJS को पहले से नहीं पता होता कि आने वाला डेटा किस Format में है—क्या वह एक &lt;strong&gt;JSON&lt;/strong&gt; है? &lt;strong&gt;HTML Form&lt;/strong&gt; का डेटा है? &lt;strong&gt;Plain Text&lt;/strong&gt; है? या कोई &lt;strong&gt;Image/File&lt;/strong&gt; है? सुरक्षा और परफॉर्मेंस कारणों से, ExpressJS डिफ़ॉल्ट रूप से इस डेटा को अपने आप Parse (यानी डिकोड करके JavaScript Object में कनवर्ट) नहीं करता।&lt;/p&gt;

&lt;p&gt;इसलिए, जब तक आप Express को कोई चश्मा (Middleware) नहीं पहनाते जो उस आने वाले कच्चे डेटा (Raw Data Stream) को पढ़ सके, तब तक Express उसे समझ नहीं पाता और सीधे आपको &lt;code&gt;req.body&lt;/code&gt; की जगह &lt;code&gt;undefined&lt;/code&gt; थमा देता है।&lt;/p&gt;

&lt;p&gt;---&lt;/p&gt;

&lt;h2&gt;
  
  
  2. The Problem: वो गलत कोड जो हम अक्सर लिख देते हैं
&lt;/h2&gt;

&lt;p&gt;चलिए, सबसे पहले एक ऐसा कोड देखते हैं जो आमतौर पर लोग लिखते हैं और फिर सिर पकड़कर बैठ जाते हैं कि डेटा क्यों नहीं आ रहा।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;PORT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// एक सिंपल POST Route जहाँ हम User Register करना चाहते हैं&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/users/register&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// यहाँ हम आश्वस्त हैं कि req.body में डेटा मिलेगा&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;userData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Incoming User Data:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;userData&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Output: Incoming User Data: undefined&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;userData&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; 
            &lt;span class="na"&gt;success&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
            &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;अरे भाई! डेटा कहाँ है? req.body तो undefined आ गया!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; 
        &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;201&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="na"&gt;success&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;userData&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Server running smoothly on port &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;अगर आप इस सर्वर पर Postman या Thunder Client से &lt;code&gt;{"name": "Amit Kumar"}&lt;/code&gt; भेजेंगे, तो आपका Console रोने लगेगा और कहेगा: &lt;code&gt;Incoming User Data: undefined&lt;/code&gt;। &lt;/p&gt;

&lt;p&gt;---&lt;/p&gt;

&lt;h2&gt;
  
  
  3. The Solution: Built-in Middlewares को काम पर लगाएं
&lt;/h2&gt;

&lt;p&gt;अब आते हैं समाधान पर। Express 4.16.0 वर्ज़न से पहले, हमें इस समस्या को सुलझाने के लिए एक अलग पैकेज डाउनलोड करना पड़ता था जिसे हम &lt;code&gt;body-parser&lt;/code&gt; कहते हैं। लेकिन अब, Express ने इस काम को खुद अपने कंधों पर ले लिया है।&lt;/p&gt;

&lt;p&gt;हमें Express को बताना होगा कि "भाई, जो भी रिक्वेस्ट आ रही है, उसे ध्यान से देखो। अगर उसका Format JSON है, तो उसे Parse करके &lt;code&gt;req.body&lt;/code&gt; में डाल दो।"&lt;/p&gt;

&lt;h3&gt;
  
  
  Solution 1: Application/JSON के लिए &lt;code&gt;express.json()&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;यदि आपका क्लाइंट JSON डेटा भेज रहा है (जो कि आजकल &lt;a href="https://itinfohubs.blogspot.com/search/label/MERN%20Stack" rel="noopener noreferrer"&gt;MERN Stack&lt;/a&gt; प्रोजेक्ट्स में सबसे आम है), तो आपको बस अपने Routes से ठीक ऊपर इस जादुई Middleware को लगाना होगा:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Solution 2: URL-Encoded (HTML Form) के लिए &lt;code&gt;express.urlencoded()&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;यदि आप HTML Forms (जहाँ Method="POST" होता है) से डेटा सबमिट करवा रहे हैं, तो डेटा &lt;code&gt;application/x-www-form-urlencoded&lt;/code&gt; फॉर्मेट में आता है। इसे संभालने के लिए आपको इस लाइन को लिखना होगा:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;urlencoded&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;extended&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;}));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;नोट:&lt;/em&gt; &lt;code&gt;{ extended: true }&lt;/code&gt; का मतलब है कि आप Nested Objects और Arrays को भी आसानी से Parse कर सकते हैं (यह बैकग्राउंड में &lt;code&gt;qs&lt;/code&gt; लाइब्रेरी का उपयोग करता है)।&lt;/p&gt;

&lt;p&gt;---&lt;/p&gt;

&lt;h2&gt;
  
  
  4. The Correct, Production-Ready Code
&lt;/h2&gt;

&lt;p&gt;चलिए अब एक ऐसा फुल-फ्लेज्ड सर्वर कोड लिखते हैं जो बिल्कुल सुरक्षित, व्यवस्थित और Production-Ready है। इसे आप सीधे अपने प्रोजेक्ट्स में कॉपी-पेस्ट कर सकते हैं।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;PORT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// 1. JSON Payload Parser Middleware (यह JSON Requests को पार्स करेगा)&lt;/span&gt;
&lt;span class="c1"&gt;// limit: '10kb' लगाने से सिक्योरिटी बनी रहती है ताकि कोई सर्वर पर बहुत बड़ी JSON फाइल न भेज सके&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;10kb&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}));&lt;/span&gt;

&lt;span class="c1"&gt;// 2. URL-Encoded Form Data Parser Middleware&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;urlencoded&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;extended&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;10kb&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}));&lt;/span&gt;

&lt;span class="c1"&gt;// 3. Simple GET Route for Testing&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/health&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="na"&gt;success&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Server is up and running perfectly!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// 4. Perfect POST Route containing Validation&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/users/create&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;username&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;password&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="c1"&gt;// ध्यान से चेक करें कि क्या डेटा वाकई में मिला है&lt;/span&gt;
        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;username&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;password&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
                &lt;span class="na"&gt;success&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Validation Error: कृपया username, email और password तीनों भेजें!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
            &lt;span class="p"&gt;});&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="c1"&gt;// यहाँ आप अपना Database logic (जैसे MongoDB में सेव करना) लिख सकते हैं&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Successfully parsed request body:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;201&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
            &lt;span class="na"&gt;success&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;User account created successfully!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="nx"&gt;username&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="nx"&gt;email&lt;/span&gt;
                &lt;span class="c1"&gt;// सुरक्षा कारणों से Response में पासवर्ड कभी न भेजें!&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Internal Server Error:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
            &lt;span class="na"&gt;success&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;सर्वर के अंदर कुछ गड़बड़ हो गई है!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// 5. Global Error Handling Middleware (Best Practice)&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt; &lt;span class="k"&gt;instanceof&lt;/span&gt; &lt;span class="nx"&gt;SyntaxError&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;400&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;body&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; 
            &lt;span class="na"&gt;success&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
            &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Invalid JSON format! कृपया अपना JSON सिंटैक्स चेक करें।&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; 
        &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nf"&gt;next&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Server starts running on http://localhost:&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;---&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Edge Cases: इन गलतियों की वजह से अब भी आ सकता है undefined!
&lt;/h2&gt;

&lt;p&gt;मान लीजिए आपने ऊपर दिया हुआ कोड हुबहू लिख लिया, लेकिन फिर भी आपका &lt;code&gt;req.body&lt;/code&gt; एरर दे रहा है या &lt;code&gt;undefined&lt;/code&gt; आ रहा है। ऐसे में घबराएं नहीं, बल्कि इन 3 बड़े कारणों (Edge Cases) को चेक करें:&lt;/p&gt;

&lt;h3&gt;
  
  
  Edge Case A: Middleware का ऑर्डर गलत होना (Order of Execution)
&lt;/h3&gt;

&lt;p&gt;Express में Middleware का क्रम (Order) ही सब कुछ है। यदि आपने Routes पहले डिफाइन कर दिए और Parser Middleware को नीचे लिखा, तो आपका डेटा पार्स नहीं होगा!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;गलत तरीका:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/data&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt; &lt;span class="c1"&gt;// पहले रूट लिख दिया&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// पार्सर नीचे है - यह काम नहीं करेगा!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;सही तरीका:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// पार्सर हमेशा सबसे ऊपर होना चाहिए!&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/data&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Edge Case B: Content-Type Header का गलत होना
&lt;/h3&gt;

&lt;p&gt;जब आप Postman या Frontend से API कॉल करते हैं, तो Request Headers में &lt;code&gt;Content-Type&lt;/code&gt; की वैल्यू बहुत महत्वपूर्ण होती है।&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;यदि आप JSON डेटा भेज रहे हैं, तो &lt;code&gt;Content-Type: application/json&lt;/code&gt; होना ही चाहिए।&lt;/li&gt;
&lt;li&gt;यदि आपके क्लाइंट ने Header सेट नहीं किया है या उसे &lt;code&gt;text/plain&lt;/code&gt; भेज दिया है, तो &lt;code&gt;express.json()&lt;/code&gt; उसे नजरअंदाज कर देगा और आपका &lt;code&gt;req.body&lt;/code&gt; फिर से &lt;code&gt;undefined&lt;/code&gt; या खाली ऑब्जेक्ट &lt;code&gt;{}&lt;/code&gt; हो जाएगा।&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Edge Case C: File Uploading और Multi-part FormData
&lt;/h3&gt;

&lt;p&gt;यह सबसे बड़ा जाल है! अगर आप अपने फॉर्म के जरिए कोई इमेज, पीडीएफ या अन्य फाइल अपलोड कर रहे हैं, तो आप &lt;code&gt;enctype="multipart/form-data"&lt;/code&gt; का इस्तेमाल करते हैं।&lt;/p&gt;

&lt;p&gt;याद रखें, न तो &lt;code&gt;express.json()&lt;/code&gt; और न ही &lt;code&gt;express.urlencoded()&lt;/code&gt; इस multipart डेटा को हैंडल कर सकते हैं। इसके लिए आपको &lt;strong&gt;Multer&lt;/strong&gt; जैसी लाइब्रेरी का इस्तेमाल करना पड़ेगा।&lt;/p&gt;

&lt;h4&gt;
  
  
  Multer का उपयोग करके File और Text Field को साथ में संभालने का उदाहरण:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;multer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;multer&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;upload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;multer&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Memory storage setup&lt;/span&gt;

&lt;span class="c1"&gt;// 'avatar' उस Input field का नाम है जो फाइल भेज रहा है&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/profile/upload&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;upload&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;single&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;avatar&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Multer फ़ाइल को req.file में डाल देगा&lt;/span&gt;
    &lt;span class="c1"&gt;// और बाकी सारे Text fields को req.body में डाल देगा!&lt;/span&gt;

    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Uploaded file details:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Text data inside body:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// यहाँ req.body undefined नहीं होगा!&lt;/span&gt;

    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="na"&gt;success&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;डेटा और फ़ाइल सफलतापूर्वक प्राप्त हुई!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;bodyReceived&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;---&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Debugging Masterclass: सर्वर को कैसे जाचें?
&lt;/h2&gt;

&lt;p&gt;अगर कभी भी फंस जाओ, तो इन स्टेप्स का इस्तेमाल करके जासूस की तरह एरर ढूंढो:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;सबसे पहले अपने Route के अंदर &lt;code&gt;console.log("Headers:", req.headers);&lt;/code&gt; लिखकर देखें। चेक करें कि क्या &lt;code&gt;content-type&lt;/code&gt; वाकई में &lt;code&gt;application/json&lt;/code&gt; आ रहा है या नहीं।&lt;/li&gt;
&lt;li&gt;चेक करें कि क्या Client से सच में डेटा भेजा जा रहा है। कई बार हम React Frontend में &lt;code&gt;body: JSON.stringify(data)&lt;/code&gt; करना भूल जाते हैं और सिर्फ सीधा ऑब्जेक्ट भेज देते हैं।&lt;/li&gt;
&lt;li&gt;यह भी देख लें कि कहीं आपका सर्वर और क्लाइंट अलग-अलग Ports पर तो नहीं चल रहे और CORS (Cross-Origin Resource Sharing) एरर की वजह से आपकी Request रास्ते में ही तो नहीं दम तोड़ रही!&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;---&lt;/p&gt;

&lt;h2&gt;
  
  
  Toh dosto, humne aaj seekha...
&lt;/h2&gt;

&lt;p&gt;आज की इस महफ़िल में हमने विस्तार से जाना कि &lt;a href="https://itinfohubs.blogspot.com/search/label/ExpressJS" rel="noopener noreferrer"&gt;ExpressJS&lt;/a&gt; में &lt;code&gt;req.body undefined&lt;/code&gt; क्यों होता है। इसका सीधा सा कारण यह है कि डिफ़ॉल्ट रूप से एक्सप्रेस आने वाले डेटा पैकेट्स को डिकोड नहीं करता। इस समस्या को सुलझाने के लिए हमें बस अपने कोड के सबसे ऊपरी हिस्से में &lt;code&gt;app.use(express.json())&lt;/code&gt; और &lt;code&gt;app.use(express.urlencoded({ extended: true }))&lt;/code&gt; के पहरेदार बिठाने होते हैं।&lt;/p&gt;

&lt;p&gt;हमेशा याद रखें कि Middleware का ऑर्डर सही होना चाहिए और Content-Type हेडर बिल्कुल सटीक होना चाहिए। अब अपने दोस्तों के साथ भी इस ट्यूटोरियल को शेयर करें और कोडिंग करते रहें। कोई भी सवाल हो, तो नीचे कमेंट में बेझिझक पूछें, आपका बड़ा भाई हमेशा मदद के लिए तैयार है!&lt;/p&gt;

&lt;p&gt;---&lt;/p&gt;

&lt;h3&gt;
  
  
  Frequently Asked Questions (FAQs)
&lt;/h3&gt;

&lt;p&gt;Q1: क्या मुझे अभी भी बॉडी पार्स करने के लिए body-parser पैकेज अलग से इंस्टॉल करना पड़ेगा?&lt;br&gt;
जी नहीं! Express के 4.16.0 वर्ज़न के बाद से बॉडी पार्सर के सारे मुख्य फीचर्स Express में इन-बिल्ट (जैसे express.json और express.urlencoded) कर दिए गए हैं। इसलिए आपको अलग से body-parser इंस्टॉल करने की कोई ज़रूरत नहीं है।&lt;/p&gt;

&lt;p&gt;Q2: मेरा express.json() भी सेटअप है, फिर भी req.body खाली {} ऑब्जेक्ट दे रहा है। क्यों?&lt;br&gt;
इसके दो बड़े कारण हो सकते हैं: पहला, क्लाइंट साइड से HTTP Request भेजते समय 'Content-Type: application/json' हेडर नहीं भेजा जा रहा है। दूसरा, आप जो JSON भेज रहे हैं उसका सिंटैक्स गलत हो सकता है (जैसे कीज़ या वैल्यूज में डबल कोट्स की कमी)।&lt;/p&gt;

&lt;p&gt;Q3: क्या GET requests में भी req.body का उपयोग किया जा सकता है?&lt;br&gt;
HTTP स्पेसिफिकेशन के अनुसार, GET request के अंदर body भेजना रिकमेंडेड नहीं है। कुछ सर्वर और क्लाइंट लाइब्रेरीज़ इसे पूरी तरह से इग्नोर या रिजेक्ट कर देती हैं। इसलिए GET रिक्वेस्ट में डेटा भेजने के लिए हमेशा Query Parameters (req.query) या Path Parameters (req.params) का उपयोग करें।&lt;/p&gt;

</description>
      <category>errorsolving</category>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Express JS me CORS error kaise solve kare</title>
      <dc:creator>banti kevat</dc:creator>
      <pubDate>Mon, 29 Jun 2026 16:27:00 +0000</pubDate>
      <link>https://dev.to/banti_kevat_8e2d123bb7994/express-js-me-cors-error-kaise-solve-kare-5e9h</link>
      <guid>https://dev.to/banti_kevat_8e2d123bb7994/express-js-me-cors-error-kaise-solve-kare-5e9h</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FBantikevat%2FTechIT-Auto-Blogger%2Fmain%2Fimages%2Fexpress-js-me-cors-error-kaise-solve-kare-835917.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FBantikevat%2FTechIT-Auto-Blogger%2Fmain%2Fimages%2Fexpress-js-me-cors-error-kaise-solve-kare-835917.png" alt="Express JS me CORS error kaise solve kare"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  हेल्लो दोस्तों! चलिए आज वेब डेवलपमेंट की एक ऐसी समस्या को जड़ से खत्म करते हैं, जिसने हर वेब डेवलपर को कभी न कभी परेशान जरूर किया है।
&lt;/h2&gt;

&lt;p&gt;अगर आप &lt;a href="https://itinfohubs.blogspot.com/search/label/MERN%20Stack" rel="noopener noreferrer"&gt;MERN Stack&lt;/a&gt; पर काम कर रहे हैं, या फिर अपने &lt;a href="https://itinfohubs.blogspot.com/search/label/ReactJS" rel="noopener noreferrer"&gt;ReactJS&lt;/a&gt; frontend को किसी &lt;a href="https://itinfohubs.blogspot.com/search/label/ExpressJS" rel="noopener noreferrer"&gt;ExpressJS&lt;/a&gt; backend API से जोड़ने की कोशिश कर रहे हैं, तो आपने ब्राउज़र के Console में एक चमकीला लाल रंग का &lt;a href="https://itinfohubs.blogspot.com/search/label/Error%20Solving" rel="noopener noreferrer"&gt;error&lt;/a&gt; जरूर देखा होगा।&lt;/p&gt;

&lt;p&gt;वह एरर कुछ इस तरह दिखता है:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Access to fetch at 'http://localhost:5000/api/users' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;इस एरर को देखकर नए डेवलपर्स अक्सर घबरा जाते हैं। वे सोचते हैं कि उनके API कोड में कोई खराबी है, या फिर उनका डेटाबेस सर्वर काम नहीं कर रहा है। लेकिन असल में, यह कोई बग नहीं है, बल्कि ब्राउज़र का एक बेहद जरूरी सिक्योरिटी फीचर है।&lt;/p&gt;

&lt;p&gt;आज के इस मास्टर-क्लास ट्यूटोरियल में, हम बिल्कुल बेसिक से शुरुआत करेंगे और समझेंगे कि CORS क्या है, यह क्यों आता है, और कैसे हम अपने &lt;a href="https://itinfohubs.blogspot.com/search/label/NodeJS" rel="noopener noreferrer"&gt;NodeJS&lt;/a&gt; और ExpressJS प्रोजेक्ट्स में इस एरर को हमेशा के लिए हल कर सकते हैं। तो चलिए, चाय की चुस्की लेते हैं और इस समस्या का समाधान ढूंढते हैं!&lt;/p&gt;

&lt;p&gt;---&lt;/p&gt;

&lt;h2&gt;
  
  
  आखिर यह CORS क्या है? (What is CORS?)
&lt;/h2&gt;

&lt;p&gt;CORS का फुल फॉर्म &lt;strong&gt;Cross-Origin Resource Sharing&lt;/strong&gt; होता है। इसे समझने से पहले हमें ब्राउज़र की एक बहुत ही महत्वपूर्ण सुरक्षा नीति को समझना होगा, जिसे &lt;strong&gt;Same-Origin Policy (SOP)&lt;/strong&gt; कहते हैं।&lt;/p&gt;

&lt;h3&gt;
  
  
  Same-Origin Policy (SOP) क्या है?
&lt;/h3&gt;

&lt;p&gt;ब्राउज़र बहुत चालाक होते हैं। वे आपकी सुरक्षा का पूरा ध्यान रखते हैं। Same-Origin Policy के नियम के मुताबिक, एक वेबसाइट (Origin A) किसी दूसरी वेबसाइट (Origin B) के API या रिसोर्सेज को बिना अनुमति के एक्सेस नहीं कर सकती।&lt;/p&gt;

&lt;p&gt;यहाँ &lt;strong&gt;Origin&lt;/strong&gt; का मतलब तीन चीजों के कॉम्बिनेशन से है:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Protocol:&lt;/strong&gt; HTTP या HTTPS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Domain (Host):&lt;/strong&gt; localhost, google.com, myapi.com&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Port:&lt;/strong&gt; 3000, 5000, 8080&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;अगर इन तीनों में से एक भी चीज़ अलग है, तो ब्राउज़र उसे &lt;strong&gt;Cross-Origin&lt;/strong&gt; मानता है।&lt;/p&gt;

&lt;p&gt;उदाहरण के लिए:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;http://localhost:3000&lt;/code&gt; (आपका React App)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;http://localhost:5000&lt;/code&gt; (आपका Express API)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;यहाँ प्रोटोकॉल (http) और डोमेन (localhost) समान हैं, लेकिन पोर्ट (3000 बनाम 5000) अलग हैं। इसलिए, ब्राउज़र इसे एक Cross-Origin रिक्वेस्ट मानता है और सुरक्षा कारणों से इसे ब्लॉक कर देता है। यही कारण है कि आपको CORS error दिखाई देता है।&lt;/p&gt;

&lt;p&gt;---&lt;/p&gt;

&lt;h2&gt;
  
  
  CORS काम कैसे करता है? (How CORS Works under the hood)
&lt;/h2&gt;

&lt;p&gt;जब आपका ब्राउज़र किसी दूसरे ओरिजिन पर रिक्वेस्ट भेजता है, तो वह सीधे डेटा नहीं मांगता। ब्राउज़र पहले बैकएंड सर्वर से बातचीत करता है। इसे हम दो कैटेगरी में बांट सकते हैं:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Simple Requests
&lt;/h3&gt;

&lt;p&gt;कुछ सामान्य रिक्वेस्ट जैसे GET या POST (बिना किसी कस्टम हेडर के) को सिंपल रिक्वेस्ट कहा जाता है। ब्राउज़र रिक्वेस्ट भेज देता है, लेकिन रिस्पॉन्स को तब तक आपके जावास्क्रिप्ट कोड को नहीं सौंपता जब तक कि सर्वर अपने रिस्पॉन्स में &lt;code&gt;Access-Control-Allow-Origin&lt;/code&gt; हेडर न भेजे।&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Preflight Requests (OPTIONS Method)
&lt;/h3&gt;

&lt;p&gt;अगर आपकी रिक्वेस्ट में कुछ खास चीजें हैं—जैसे कि आपने PUT, DELETE मेथड का इस्तेमाल किया है, या फिर कोई कस्टम हेडर (जैसे Authorization Header या Content-Type: application/json) भेजा है—तो ब्राउज़र मुख्य रिक्वेस्ट भेजने से पहले एक "जांच रिक्वेस्ट" भेजता है।&lt;/p&gt;

&lt;p&gt;इस जांच रिक्वेस्ट को &lt;strong&gt;Preflight Request&lt;/strong&gt; कहते हैं, और यह &lt;strong&gt;OPTIONS&lt;/strong&gt; HTTP मेथड का उपयोग करती है।&lt;/p&gt;

&lt;p&gt;सर्वर को इस OPTIONS रिक्वेस्ट का जवाब देकर ब्राउज़र को बताना होता है कि "हाँ, मैं इस ओरिजिन से इस तरह के रिक्वेस्ट स्वीकार करने के लिए तैयार हूँ।" अगर सर्वर हरी झंडी देता है, तभी ब्राउज़र असली (Actual) रिक्वेस्ट भेजता है।&lt;/p&gt;

&lt;p&gt;---&lt;/p&gt;

&lt;h2&gt;
  
  
  Express JS में CORS Error को हल करने के तरीके
&lt;/h2&gt;

&lt;p&gt;ExpressJS में इस एरर को हल करने के मुख्य रूप से दो तरीके हैं। पहला तरीका है कस्टम मिडलवेयर (Custom Middleware) बनाकर रिस्पॉन्स हेडर्स को मैन्युअली सेट करना, और दूसरा (और सबसे आसान) तरीका है ऑफिशियल &lt;code&gt;cors&lt;/code&gt; पैकेज का इस्तेमाल करना।&lt;/p&gt;

&lt;p&gt;हम दोनों तरीकों को पूरी कोडिंग के साथ विस्तार से समझेंगे ताकि आपके पास इस समस्या का पूरा ज्ञान हो।&lt;/p&gt;

&lt;p&gt;---&lt;/p&gt;

&lt;h3&gt;
  
  
  तरीका १: कस्टम मिडलवेयर के ज़रिए हेडर्स सेट करना (Manual Method)
&lt;/h3&gt;

&lt;p&gt;अगर आप अपने प्रोजेक्ट में कोई बाहरी लाइब्रेरी या पैकेज इंस्टॉल नहीं करना चाहते हैं, तो आप Express के मिडलवेयर फंक्शन का उपयोग करके खुद के कस्टम हेडर्स सेट कर सकते हैं।&lt;/p&gt;

&lt;p&gt;ध्यान देने वाली बात ये है कि यह मिडलवेयर आपके सभी रूट हैंडलर्स (Route Handlers) से ऊपर होना चाहिए ताकि हर रिक्वेस्ट पर यह हेडर लागू हो सके।&lt;/p&gt;

&lt;p&gt;नीचे दिए गए कोड को ध्यान से देखें। यह एक पूरी तरह से काम करने वाला ExpressJS सर्वर है जिसमें हमने मैन्युअली CORS हेडर्स सेट किए हैं:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// JSON डेटा पार्स करने के लिए मिडलवेयर&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="c1"&gt;// कस्टम CORS मिडलवेयर&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// हम केवल अपने React App (localhost:3000) को अनुमति दे रहे हैं&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setHeader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Access-Control-Allow-Origin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;http://localhost:3000&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// हम कौन-कौन से HTTP Methods की अनुमति देना चाहते हैं&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setHeader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Access-Control-Allow-Methods&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;GET, POST, PUT, DELETE, PATCH, OPTIONS&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// हम क्लाइंट को कौन-कौन से Headers भेजने की अनुमति देते हैं&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setHeader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Access-Control-Allow-Headers&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content-Type, Authorization, X-Requested-With&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// यदि क्लाइंट क्रेडेंशियल्स (Cookies/Sessions) भेजना चाहता है&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setHeader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Access-Control-Allow-Credentials&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;true&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// Preflight (OPTIONS) रिक्वेस्ट को तुरंत हैंडल करना&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;OPTIONS&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sendStatus&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// अगले मिडलवेयर या रूट पर जाने के लिए next() कॉल करें&lt;/span&gt;
    &lt;span class="nf"&gt;next&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// एक सिंपल टेस्ट API Endpoint&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/data&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="na"&gt;success&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;CORS Error सफलतापूर्वक हल हो गया है!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="na"&gt;username&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Rahul Kumar&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Senior Developer&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// सर्वर को पोर्ट 5000 पर स्टार्ट करना&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;PORT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Server running on http://localhost:&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  यह कोड कैसे काम करता है?
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;res.setHeader('Access-Control-Allow-Origin', '&lt;a href="http://localhost:3000'):" rel="noopener noreferrer"&gt;http://localhost:3000'):&lt;/a&gt;&lt;/strong&gt; यह ब्राउज़र को बताता है कि केवल &lt;code&gt;http://localhost:3000&lt;/code&gt; से आने वाली रिक्वेस्ट ही इस सर्वर का डेटा पढ़ सकती हैं।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OPTIONS Request handling:&lt;/strong&gt; जब ब्राउज़र Preflight रिक्वेस्ट भेजता है, तो हमारा मिडलवेयर तुरंत &lt;code&gt;200 OK&lt;/code&gt; रिस्पॉन्स भेज देता है, जिससे ब्राउज़र संतुष्ट हो जाता है और मुख्य रिक्वेस्ट भेज देता है।&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;---&lt;/p&gt;

&lt;h3&gt;
  
  
  तरीका २: 'cors' NPM पैकेज का उपयोग करना (The Industry Standard)
&lt;/h3&gt;

&lt;p&gt;मैन्युअल तरीका अच्छा है, लेकिन बड़े प्रोडक्शन ऐप्स में अलग-अलग तरह के क्रेडेंशियल्स, मल्टीपल डोमेन्स और सुरक्षा की अन्य चीजों को मैन्युअली संभालना मुश्किल और थकाऊ हो सकता है।&lt;/p&gt;

&lt;p&gt;इसीलिए, NodeJS कम्युनिटी में &lt;code&gt;cors&lt;/code&gt; नाम का एक बेहद लोकप्रिय और भरोसेमंद पैकेज मौजूद है। चलिए देखते हैं इसका इस्तेमाल कैसे करना है।&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 1: पैकेज इंस्टॉल करें
&lt;/h4&gt;

&lt;p&gt;अपने टर्मिनल में प्रोजेक्ट डायरेक्टरी के अंदर नीचे दी गई कमांड चलाएं:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;cors
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Step 2: Express ऐप में इसका इस्तेमाल करें
&lt;/h4&gt;

&lt;p&gt;यहाँ हमने &lt;code&gt;cors&lt;/code&gt; पैकेज का उपयोग करके एक पूरा, प्रोडक्शन-रेडी एक्सप्रेस सर्वर तैयार किया है:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cors&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="c1"&gt;// विकल्प A: सभी Origins को अनुमति देना (Development के लिए ठीक है, पर Production के लिए सुरक्षित नहीं है)&lt;/span&gt;
&lt;span class="c1"&gt;// app.use(cors());&lt;/span&gt;

&lt;span class="c1"&gt;// विकल्प B: कस्टम कॉन्फ़िगरेशन (Highly Recommended for Production)&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;corsOptions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// केवल इस डोमेन को अनुमति दें&lt;/span&gt;
    &lt;span class="na"&gt;origin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;http://localhost:3000&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 

    &lt;span class="c1"&gt;// क्रेडेंशियल्स जैसे कुकीज़ या ऑथराइजेशन टोकन की अनुमति देना&lt;/span&gt;
    &lt;span class="na"&gt;credentials&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

    &lt;span class="c1"&gt;// कौन-कौन से मेथड्स एलाऊ करने हैं&lt;/span&gt;
    &lt;span class="na"&gt;methods&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;GET&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;PUT&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;DELETE&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;OPTIONS&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;

    &lt;span class="c1"&gt;// कौन से हेडर्स क्लाइंट भेज सकता है&lt;/span&gt;
    &lt;span class="na"&gt;allowedHeaders&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Authorization&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;

    &lt;span class="c1"&gt;// Preflight रिस्पॉन्स को ब्राउज़र में कितने समय तक कैश (Cache) रखना है (सेकंड में)&lt;/span&gt;
    &lt;span class="na"&gt;maxAge&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;86400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// 24 hours&lt;/span&gt;

    &lt;span class="c1"&gt;// कुछ पुराने ब्राउज़र्स के लिए सक्सेस स्टेटस कोड सेट करना&lt;/span&gt;
    &lt;span class="na"&gt;optionsSuccessStatus&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt; 
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// cors मिडलवेयर को अपने ऑप्शंस के साथ लागू करें&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;cors&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;corsOptions&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="c1"&gt;// एपीआई एंडपॉइंट&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Amit Sharma&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Priya Patel&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;PORT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Server successfully running on port &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;---&lt;/p&gt;

&lt;h2&gt;
  
  
  Dynamic Origins: जब आपके पास मल्टीपल फ्रंटएंड डोमेन्स हों
&lt;/h2&gt;

&lt;p&gt;असली दुनिया में, जब आप कोई बड़ा ऐप बनाते हैं, तो आपके पास सिर्फ एक फ्रंटएंड URL नहीं होता। आपके पास डेवलपमेंट के लिए &lt;code&gt;localhost&lt;/code&gt;, टेस्टिंग के लिए एक स्टेजिंग URL (जैसे Vercel या Netlify) और अंत में एक फाइनल प्रोडक्शन डोमेन (जैसे &lt;code&gt;https://mywebapp.com&lt;/code&gt;) हो सकता है।&lt;/p&gt;

&lt;p&gt;ऐसी स्थिति में आप &lt;code&gt;corsOptions&lt;/code&gt; के &lt;code&gt;origin&lt;/code&gt; प्रॉपर्टी में एक एरे (Array) या फिर एक कस्टमाइज़्ड फ़ंक्शन पास कर सकते हैं जो डायनेमिकली रिक्वेस्ट के ओरिजिन को चेक करेगा।&lt;/p&gt;

&lt;p&gt;चलिए देखते हैं इसे कैसे लिखा जाता है:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cors&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// हमारे स्वीकृत डोमेन्स की लिस्ट (Whitelist)&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;allowedOrigins&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;http://localhost:3000&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://my-staging-app.vercel.app&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://www.mywebapp.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;corsOptions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;origin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;origin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// यदि ओरिजिन हमारी लिस्ट में है, या यदि कोई ओरिजिन नहीं है (जैसे Postman या सर्वर-टू-सर्वर रिक्वेस्ट)&lt;/span&gt;
        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;origin&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;allowedOrigins&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;indexOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;origin&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nf"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nf"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Not allowed by CORS policy!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;credentials&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;cors&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;corsOptions&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/secure-data&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;यह डेटा केवल स्वीकृत डोमेन्स को ही दिखाई देगा!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Server running on port 5000&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;---&lt;/p&gt;

&lt;h2&gt;
  
  
  CORS एरर से जुड़े कॉमन मिस्टेक्स और उनके सोलूशन्स
&lt;/h2&gt;

&lt;p&gt;दोस्तों, कई बार सब कुछ सही सेट करने के बाद भी CORS एरर आ जाता है। चलिए कुछ ऐसी गलतियों पर नज़र डालते हैं जो अक्सर डेवलपर्स कर बैठते हैं:&lt;/p&gt;

&lt;h3&gt;
  
  
  १. 'cors' मिडलवेयर को रूट हैंडलर्स के नीचे लिखना
&lt;/h3&gt;

&lt;p&gt;यह सबसे आम गलती है। एक्सप्रेस में मिडलवेयर्स का क्रम (Order) बहुत मायने रखता है। यदि आपने अपने रूट्स को पहले डिफाइन कर दिया और &lt;code&gt;app.use(cors())&lt;/code&gt; को नीचे लिखा, तो रूट्स पर रिक्वेस्ट जाने से पहले CORS हेडर सेट ही नहीं होंगे और ब्राउज़र एरर दे देगा।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;समाधान:&lt;/strong&gt; हमेशा अपने सभी API रूट्स (जैसे &lt;code&gt;app.use('/api', myRouter)&lt;/code&gt;) को लिखने से पहले सबसे ऊपर CORS मिडलवेयर को रखें।&lt;/p&gt;

&lt;h3&gt;
  
  
  २. Credentials इनेबल करने पर Origin को '*' (Wildcard) सेट करना
&lt;/h3&gt;

&lt;p&gt;यदि आपके फ्रंटएंड को कुकीज़ (Cookies) या सेशन क्रेडेंशियल्स की ज़रूरत है, और आपने अपने फ्रंटएंड फेच रिक्वेस्ट में &lt;code&gt;credentials: 'include'&lt;/code&gt; सेट किया है, तो बैकएंड पर &lt;code&gt;origin: '*'&lt;/code&gt; रखना सख्त मना है। ब्राउज़र इसे तुरंत ब्लॉक कर देगा और कंसोल में एरर फेंक देगा।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;समाधान:&lt;/strong&gt; जब भी &lt;code&gt;credentials: true&lt;/code&gt; हो, तो &lt;code&gt;origin&lt;/code&gt; में हमेशा एक स्पेसिफिक डोमेन (जैसे &lt;code&gt;'http://localhost:3000'&lt;/code&gt;) ही पास करें, कभी भी वाइल्डकार्ड स्टार (&lt;code&gt;*&lt;/code&gt;) का उपयोग न करें।&lt;/p&gt;

&lt;h3&gt;
  
  
  ३. प्रोडक्शन में रिवर्स प्रॉक्सी (Nginx / Cloudflare) का इस्तेमाल करना
&lt;/h3&gt;

&lt;p&gt;कई बार आपका कोड बिल्कुल सही होता है, लेकिन जब आप उसे प्रोडक्शन सर्वर जैसे AWS, VPS या Render पर डिप्लॉय करते हैं, तो आपका रिवर्स प्रॉक्सी सर्वर (जैसे Nginx) या Cloudflare भी CORS एरर दे सकता है।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;समाधान:&lt;/strong&gt; सुनिश्चित करें कि यदि आप Nginx का उपयोग कर रहे हैं, तो आपके Nginx कॉन्फ़िगरेशन फ़ाइल में CORS हेडर्स ओवरराइड न हो रहे हों, या फिर आप सीधे Nginx लेवल पर ही CORS हेडर्स को कॉन्फ़िगर कर दें और एक्सप्रेस कोड से हटा दें।&lt;/p&gt;

&lt;p&gt;---&lt;/p&gt;

&lt;h2&gt;
  
  
  परफॉरमेंस और सिक्योरिटी के लिए बेस्ट प्रैक्टिसेज (Best Practices)
&lt;/h2&gt;

&lt;p&gt;जब आप प्रोडक्शन लेवल पर काम कर रहे हों, तो केवल एरर को सॉल्व करना ही काफी नहीं होता। सर्वर की परफॉरमेंस और सिक्योरिटी को बनाए रखना भी उतना ही जरूरी है। यहाँ कुछ बेस्ट प्रैक्टिसेज दी गई हैं जिन्हें आपको हमेशा फॉलो करना चाहिए:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;maxAge का उपयोग करें:&lt;/strong&gt; ब्राउज़र हर बार रिक्वेस्ट भेजने से पहले जो Preflight (OPTIONS) रिक्वेस्ट भेजता है, उससे सर्वर पर लोड बढ़ता है। &lt;code&gt;maxAge&lt;/code&gt; सेट करने से ब्राउज़र उस रिस्पॉन्स को कैश कर लेता है और बार-बार फालतू रिक्वेस्ट नहीं भेजता।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production में Wildcard (*) से बचें:&lt;/strong&gt; कभी भी अपने लाइव प्रोजेक्ट में &lt;code&gt;origin: '*'&lt;/code&gt; न छोड़ें। यह आपके एपीआई को असुरक्षित बनाता है, जिससे कोई भी अनधिकृत वेबसाइट आपके सर्वर से डेटा चुरा सकती है।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;केवल आवश्यक Methods की अनुमति दें:&lt;/strong&gt; अगर आपका एपीआई केवल डेटा पढ़ने के लिए है, तो CORS में केवल &lt;code&gt;GET&lt;/code&gt; मेथड की अनुमति दें। &lt;code&gt;POST&lt;/code&gt;, &lt;code&gt;PUT&lt;/code&gt;, &lt;code&gt;DELETE&lt;/code&gt; को डिसेबल रखें।&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;---&lt;/p&gt;

&lt;h2&gt;
  
  
  संक्षेप में कहें तो... (Toh dosto, humne aaj seekha...)
&lt;/h2&gt;

&lt;p&gt;तो दोस्तों, आज हमने सीखा कि ब्राउज़र का Same-Origin Policy सुरक्षा के लिए कितना आवश्यक है और कैसे यह हमारी सुरक्षा करता है। जब भी हमें अलग-अलग पोर्ट्स या डोमेन्स के बीच डेटा का आदान-प्रदान करना होता है, तो हमें सर्वर साइड पर एक्सप्रेस को यह बताना पड़ता है कि "हाँ, यह फ्रंटएंड हमारा ही है और हम इस पर भरोसा करते हैं।"&lt;/p&gt;

&lt;p&gt;हमने मैन्युअल हेडर्स सेट करने का तरीका भी देखा और साथ ही &lt;code&gt;cors&lt;/code&gt; पैकेज के जरिए एकदम प्रोफेशनल और सुरक्षित तरीके से इस समस्या का निवारण करना भी सीखा। अब अगली बार जब भी आपके कंसोल में यह एरर चमकेगा, तो आप बिना डरे इसे चुटकियों में सुलझा लेंगे!&lt;/p&gt;

&lt;p&gt;कोडिंग करते रहिए, नई चीजें सीखते रहिए, और अगर कोई भी दुविधा हो, तो अपने इस सीनियर डेवलपर दोस्त को याद करना न भूलें। मिलते हैं अगले ट्यूटोरियल में!&lt;/p&gt;

&lt;p&gt;---&lt;/p&gt;

&lt;h3&gt;
  
  
  Frequently Asked Questions (FAQs)
&lt;/h3&gt;

&lt;p&gt;Q1: क्या Postman में रिक्वेस्ट भेजने पर भी CORS error आता है?&lt;br&gt;
नहीं, Postman में रिक्वेस्ट भेजने पर CORS error कभी नहीं आता। CORS एक विशुद्ध रूप से "ब्राउज़र-आधारित" सुरक्षा नीति (Browser-side Security Policy) है। चूंकि Postman कोई ब्राउज़र नहीं है, इसलिए वह Same-Origin Policy को लागू नहीं करता। यही कारण है कि कोई भी API Postman में पूरी तरह काम करती है लेकिन ब्राउज़र के कंसोल में एरर देती है।&lt;/p&gt;

&lt;p&gt;Q2: क्या मैं फ्रंटएंड साइड (React/Vue) से CORS error को पूरी तरह ठीक कर सकता हूँ?&lt;br&gt;
नहीं, फ्रंटएंड कोड लिखकर आप ब्राउज़र की सुरक्षा नीति को बायपास नहीं कर सकते। CORS का वास्तविक और सही समाधान हमेशा "सर्वर-साइड" (Backend) पर ही होता है। हालांकि, डेवलपमेंट के दौरान आप React में &lt;code&gt;package.json&lt;/code&gt; के अंदर &lt;code&gt;"proxy": "http://localhost:5000"&lt;/code&gt; सेट करके इसे अस्थायी रूप से हल कर सकते हैं, लेकिन प्रोडक्शन में जाने पर आपको बैकएंड पर ही CORS कॉन्फ़िगर करना होगा।&lt;/p&gt;

&lt;p&gt;Q3: Access-Control-Allow-Origin: '*' का क्या नुकसान है?&lt;br&gt;
तारांकन चिह्न (*) का अर्थ है कि इंटरनेट पर मौजूद कोई भी वेबसाइट आपके सर्वर से डेटा का अनुरोध कर सकती है और उसे पढ़ सकती है। यदि आपका एपीआई पब्लिक है (जैसे मौसम की जानकारी या सार्वजनिक ब्लॉग), तो यह ठीक है। लेकिन यदि आपके एपीआई में संवेदनशील यूजर डेटा है, तो '*' सेट करने से कोई भी दुर्भावनापूर्ण वेबसाइट (Malicious Website) आपके यूजर्स के डेटा को स्क्रिप्ट के जरिए चुरा सकती है, जो कि बहुत बड़ा सुरक्षा जोखिम है।&lt;/p&gt;

</description>
      <category>errorsolving</category>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
