Node.js का कनेक्ट, एक्सप्रेस और "मिडलवेयर" क्या है?


634

जावास्क्रिप्ट को अच्छी तरह से जानने के बावजूद, मैं भ्रमित हूं कि वास्तव में Node.js पारिस्थितिकी तंत्र में ये तीन परियोजनाएं क्या हैं। क्या यह रेल के रैक जैसा कुछ है? क्या कोई समझा सकता है?


1
मैंने कनेक्ट का उपयोग नहीं किया है, लेकिन यह पृष्ठ सुनिश्चित करता है कि यह रेल के रैक के अनुरूप हो। क्या आप समझते हैं कि नोडवेयर के संदर्भ में क्या मिडलवेयर है?
मैट बॉल

ईमानदारी से कहूं तो उतना नहीं जितना मैं चाहूंगा। जहाँ तक मुझे पता है कि यह परत है जो रूटिंग, गज़िंग, हेडर, कुकीज जैसे सभी पूर्व-ऐप सामानों को करती है ..? क्या मैं सही हू? तो क्या यह एक तरह से काम करता है जो उचित MVC कंट्रोलर / एक्शन को रूट करता है MVC फ्रेमवर्क (रेल्स की तरह) के अंदर नहीं, बल्कि मिडलवेयर में?
tillda


8
यह आपके सभी प्रश्नों और उत्तर के बारे में अधिक जानकारी के लिए आपको बताएगा कि क्या मैं समझता हूं कि यह बहुत देर हो चुकी है (उम्मीद है कि कोई व्यक्ति नीचे स्क्रॉल करता है ...), लेकिन निम्नलिखित ब्लॉग लेख को पढ़ने से आपके द्वारा कनेक्ट, एक्सप्रेस और मिडलवेयर के बारे में सभी प्रश्न स्पष्ट हो जाएंगे। । यह आपको Node.js के बारे में भी कुछ सिखाता है। http://evanhahn.com/understanding-express/
DotNetInfo

@DiegoCaxito आपका लिंक टूट गया है।
मस्त

जवाबों:


891

[ अपडेट: इसके ४.० रिलीज के रूप में, एक्सप्रेस अब कनेक्ट का उपयोग नहीं करता है। हालाँकि, एक्सप्रेस अभी भी कनेक्ट के लिए लिखे गए मिडलवेयर के साथ संगत है। मेरा मूल उत्तर नीचे है]

मुझे खुशी है कि आपने इस बारे में पूछा, क्योंकि यह निश्चित रूप से लोगों के लिए भ्रम की एक आम बात है जो Node.js. यहाँ यह समझाने में मेरा सबसे अच्छा शॉट है:

  • Node.js स्वयं एक http मॉड्यूल प्रदान करता है , जिसकी createServerविधि एक वस्तु लौटाती है जिसका उपयोग आप HTTP अनुरोधों का जवाब देने के लिए कर सकते हैं। वह वस्तु http.Serverप्रोटोटाइप को विरासत में मिली है ।

  • कनेक्ट एक createServerविधि भी प्रदान करता है , जो एक ऑब्जेक्ट देता है जो कि एक विस्तारित संस्करण को विरासत में देता है http.Server। कनेक्ट के एक्सटेंशन मुख्य रूप से मिडलवेयर में प्लग करना आसान बनाते हैं । यही कारण है कि कनेक्ट खुद को "मिडलवेयर फ्रेमवर्क" के रूप में वर्णित करता है, और अक्सर रूबी की रैक के अनुरूप होता है।

  • एक्सप्रेस मॉड्यूल से कनेक्ट करने के लिए एक्सप्रेस कनेक्ट करता है: यह एक createServerतरीका प्रदान करता है जो कनेक्ट के Serverप्रोटोटाइप को बढ़ाता है । तो कनेक्ट की सभी कार्यक्षमता वहाँ है, प्लस व्यू रेंडरिंग और मार्गों का वर्णन करने के लिए एक आसान डीएसएल। रूबी की सिनात्रा एक अच्छी उपमा है।

  • फिर अन्य ढांचे हैं जो आगे भी जाते हैं और एक्सप्रेस का विस्तार करते हैं! उदाहरण के लिए, ज़प्पा , जो कॉफीस्क्रिप्ट, सर्वर-साइड jQuery और परीक्षण के लिए समर्थन को एकीकृत करता है।

यहां "मिडलवेयर" के माध्यम से जो कुछ भी है उसका एक ठोस उदाहरण है: बॉक्स से बाहर, आपके लिए स्थिर फ़ाइलों में से कोई भी कार्य नहीं करता है। लेकिन बस connect.static(एक मिडलवेयर जो कनेक्ट के साथ आता है) में फेंक दें , एक निर्देशिका को इंगित करने के लिए कॉन्फ़िगर किया गया है, और आपका सर्वर उस निर्देशिका में फ़ाइलों तक पहुंच प्रदान करेगा। एक्सप्रेस कनेक्ट के बिचौलियों को भी प्रदान करता है कि ध्यान दें; express.staticके रूप में ही है connect.static। (दोनों को staticProviderहाल तक जाना जाता था।)

मेरी धारणा यह है कि इन दिनों एक्सप्रेस के साथ अधिकांश "वास्तविक" Node.js ऐप विकसित किए जा रहे हैं; इसके द्वारा जोड़ी जाने वाली सुविधाएँ अत्यंत उपयोगी हैं, और निम्न-स्तरीय कार्यक्षमता के सभी अभी भी वहाँ हैं यदि आप इसे चाहते हैं।


130
एक बात जो मुझे कनेक्ट के बारे में परेशान करती है, वह यह है कि इसका प्रलेखन यह स्वीकार नहीं करता है कि नोड एक HTTP सर्वर से अधिक है। "कनेक्ट Node.js के लिए एक मिडलवेयर फ्रेमवर्क है" - नहीं, "कनेक्ट Node.js के HTTP सर्वर के लिए एक मिडलवेयर फ्रेमवर्क है"
स्लिम

46
@ मुझे लगता है कि आप बहुत ज्यादा पढ़ रहे हैं। कनेक्ट के निर्माता प्रचलित नोड डेवलपर्स हैं; वे अच्छी तरह जानते हैं कि नोड एक HTTP सर्वर से अधिक है। लेकिन यह करता है है एक HTTP में बनाया सर्वर, और कनेक्ट एक मिडलवेयर ढांचा है कि आप अपने Node.js अनुप्रयोग में उपयोग कर सकते हैं।
ट्रेवर बर्नहैम

22
ओह, मुझे यकीन है कि कनेक्ट के निर्माता इससे पूरी तरह अवगत हैं। वे हासिल नहीं कर सकते हैं, जो उनके पास नोड की समझ के बिना है। लेकिन शब्दों की पसंद नए लोगों के लिए नोड को भ्रमित कर रही है; और कनेक्ट करने के लिए नए लोगों के लिए।
स्लिम

10
क्रिस्टल स्पष्ट, सभी उत्तर के लिए क्या प्रयास करना चाहिए। उत्कृष्ट काम ट्रेवर।
मार्क एस्सेल

6
महान व्याख्या। इस तरह के उत्तर नए लोगों को Node.js पारिस्थितिकी तंत्र में लाने में मदद करते हैं। Node.js में वेब ऐप विकसित करने से परिचित लोगों के लिए, एक्सप्रेस शुरू करने का स्थान है। रूबी सादृश्य को जारी रखने के लिए, एक्सप्रेस सिनात्रा के बराबर है। यह विशेष रूप से अजाक्स क्लाइंट-साइड ऐप्स के लिए JSON API बनाने के लिए बहुत अच्छा है। एक चीज जो मैंने पाई है वह यह है कि एक बार एक आवेदन एक निश्चित स्तर की जटिलता को मारता है, एक और परत की आवश्यकता होती है जो अधिक रेल जैसी होती है। मैं इस उद्देश्य के लिए लोकोमोटिव पर काम कर रहा हूं , जो आगे एक्सप्रेस के ऊपर की परतें हैं।
जारेड हैन्सन

159

स्वीकृत उत्तर वास्तव में पुराना है (और अब गलत है)। यहां कनेक्ट (3.0) / एक्सप्रेस (4.0) के वर्तमान संस्करण के आधार पर जानकारी (स्रोत के साथ) है।

क्या Node.js के साथ आता है

http / https createServer जो केवल एक कॉलबैक लेता है (req, res) उदा

var server = http.createServer(function (request, response) {

    // respond
    response.write('hello client!');
    response.end();

});

server.listen(3000);

क्या जोड़ता है

मिडलवेयर मूल रूप से कोई भी सॉफ्टवेयर है जो आपके एप्लिकेशन कोड और कुछ निम्न स्तर एपीआई के बीच बैठता है। कनेक्ट अंतर्निहित HTTP सर्वर कार्यक्षमता को बढ़ाता है और एक प्लगइन फ्रेमवर्क जोड़ता है। प्लगइन्स मिडलवेयर के रूप में कार्य करते हैं और इसलिए कनेक्ट एक मिडलवेयर फ्रेमवर्क है

जिस तरह से यह बहुत सरल है ( और वास्तव में कोड वास्तव में कम है! )। जैसे ही आप फोन var connect = require('connect'); var app = connect();करते हैं, आपको एक फ़ंक्शन मिलता है app:

  1. एक अनुरोध को संभाल सकता है और एक प्रतिक्रिया वापस कर सकता है। ऐसा इसलिए है क्योंकि आप मूल रूप से इस फ़ंक्शन को प्राप्त करते हैं
  2. प्लगइन्स प्रबंधित करने के लिए एक सदस्य फ़ंक्शन .use( स्रोत ) है ( जो कोड की इस सरल रेखा के कारण यहां से आता है )।

1. की वजह से) आप निम्नलिखित कर सकते हैं:

var app = connect();

// Register with http
http.createServer(app)
    .listen(3000);

2 के साथ संयोजन करें) और आपको मिलता है:

var connect = require('connect');

// Create a connect dispatcher
var app = connect()
      // register a middleware
      .use(function (req, res, next) { next(); });

// Register with http
http.createServer(app)
    .listen(3000);

कनेक्ट खुद को पंजीकृत करने के लिए एक उपयोगिता फ़ंक्शन प्रदान करता है httpताकि आपको कॉल करने की आवश्यकता न हो http.createServer(app)। इसका नाम listenऔर कोड बस एक नया http सर्वर बनाता है, कॉलबैक के रूप में रजिस्टर कनेक्ट करता है और तर्कों को आगे करता है http.listenस्रोत से

app.listen = function(){
  var server = http.createServer(this);
  return server.listen.apply(server, arguments);
};

तो, आप कर सकते हैं:

var connect = require('connect');

// Create a connect dispatcher and register with http
var app = connect()
          .listen(3000);
console.log('server running on port 3000');

यह अभी भी http.createServerशीर्ष पर एक प्लगइन ढांचे के साथ आपका अच्छा पुराना है ।

ExpressJS क्या जोड़ता है

एक्सप्रेसजेएस और कनेक्ट समानांतर परियोजनाएं हैं। कनेक्ट सिर्फ एक मिडिलवेयर फ्रेमवर्क है, जिसमें एक अच्छा useफंक्शन है। एक्सप्रेस कनेक्ट ( पैकेज देखें ) पर निर्भर नहीं करता है । हालाँकि यह वह सब कुछ करता है जो कनेक्ट करता है अर्थात:

  1. createServerकनेक्ट के साथ पंजीकृत किया जा सकता है क्योंकि यह भी केवल एक फ़ंक्शन है जो req/ resजोड़ी ( स्रोत ) ले सकता है।
  2. मिडलवेयर को पंजीकृत करने के लिए एक उपयोग फ़ंक्शन
  3. एक उपयोगिता listenसमारोह http के साथ खुद को पंजीकृत करने के लिए

कनेक्ट क्या प्रदान करता है (जो डुप्लिकेट व्यक्त करते हैं) के अलावा, इसमें अधिक सुविधाओं का एक गुच्छा है। जैसे

  1. है दृश्य इंजन समर्थन
  2. इसके राउटर के लिए शीर्ष स्तर की क्रियाएं (प्राप्त / पोस्ट आदि) हैं
  3. है आवेदन सेटिंग्स समर्थन करते हैं।

मिडलवेयर साझा किया जाता है

useExpressJS के समारोह और कनेक्ट संगत है और इसलिए है मिडलवेयर साझा किया जाता है । दोनों मिडलवेयर फ्रेमवर्क हैं, एक्सप्रेस सिर्फ एक साधारण मिडलवेयर फ्रेमवर्क से अधिक है ।

आपको किसका उपयोग करना चाहिए?

मेरी राय: आपको अपनी पसंद बनाने के लिए ऊपर ^ पर आधारित पर्याप्त ^ सूचित किया जाता है।

  • उपयोग करें http.createServerयदि आप स्क्रैच से कनेक्ट / एक्सप्रेसजेज जैसा कुछ बना रहे हैं।
  • यदि आप मिडलवेयर, टेस्टिंग प्रोटोकॉल आदि को लिख रहे हैं तो कनेक्ट का उपयोग करें क्योंकि यह शीर्ष पर एक अच्छा अमूर्त है http.createServer
  • यदि आप वेबसाइटों को अधिकृत कर रहे हैं, तो एक्सप्रेसजेस का उपयोग करें।

ज्यादातर लोगों को बस एक्सप्रेसजेएस का उपयोग करना चाहिए।

स्वीकृत उत्तर के बारे में क्या गलत है

हो सकता है कि ये कुछ समय के लिए सही हों, लेकिन अब गलत हैं:

जो HTTP.Server का एक विस्तारित संस्करण विरासत में मिला है

गलत। यह इसका विस्तार नहीं करता है और जैसा कि आपने देखा है ... इसका उपयोग करता है

एक्सप्रेस मॉड्यूल से कनेक्ट करने के लिए एक्सप्रेस कनेक्ट करता है

एक्सप्रेस 4.0 भी कनेक्ट पर निर्भर नहीं करता है। वर्तमान पैकेज देखें। Json निर्भरता अनुभाग


आप कहते हैं कि आप एक अनुरोध को संभालने और प्रतिक्रिया देने की क्षमता देते हैं लेकिन लोग कहते हैं कि एक्सप्रेस वास्तव में वेब सर्वर है ... मैं भ्रमित हूं। एक प्रतिक्रिया वापस भेजने की आवश्यकता नहीं होगी वेब सर्वर क्षमता (जैसे एक्सप्रेस)?
पॉजिटिव

1
अच्छा सामान, धन्यवाद! बहुत उपयोगी ... विशेष रूप से यह जानते हुए भी कि कनेक्टिंग वास्तव में वही है जो रूटिंग प्रदान करता है, और बस विरासत में व्यक्त करता है, यह रूटिंग का एकमात्र / स्रोत प्रदाता नहीं है। और अंत में उपयोग के मामले मददगार हैं क्योंकि मुझे लगता है कि मुझे कनेक्ट और एक्सप्रेस का उपयोग करना होगा, लेकिन वास्तव में आप सभी को उपयोग करने की आवश्यकता है वेब ऐप्स के लिए एक्सप्रेस है इसलिए यह मेरे लिए बहुत बड़ी बात है। आप दोनों को स्थापित नहीं करते हैं, आप एक या दूसरे को स्थापित करते हैं!
पॉजिटिव

आपका जवाब शीर्ष पर होना चाहिए। जब मैंने स्वीकार किए गए उत्तर को पढ़ा, तो मैंने इसे उकेरा। लेकिन आपके जवाब को पढ़ने के बाद ... नाह्ह
अरुण जोशला

67

Node.js

Node.js सर्वर साइड के लिए एक जावास्क्रिप्ट मोटर है।
सभी js क्षमताओं के अलावा, इसमें नेटवर्किंग क्षमताएं (जैसे HTTP), और फ़ाइल सिस्टम तक पहुंच शामिल है।
यह क्लाइंट-साइड js से भिन्न होता है, जहाँ नेटवर्किंग कार्यों को ब्राउज़र द्वारा एकाधिकार कर दिया जाता है, और सुरक्षा कारणों से फाइल सिस्टम तक पहुँच वर्जित है।

एक वेब सर्वर के रूप में node.js: एक्सप्रेस

सर्वर में चलने वाला कुछ, HTTP को समझता है और वेब सर्वर की तरह लगता है। लेकिन यह एक नहीं है।
नोड.जेएस एक वेब सर्वर की तरह व्यवहार करता है जिसे इसे प्रोग्राम करना है: आने वाले HTTP अनुरोधों को संभालना और उचित प्रतिक्रियाएं प्रदान करना।
यह वही है जो एक्सप्रेस करता है: यह js में एक वेब सर्वर का कार्यान्वयन है।
इस प्रकार, एक वेब साइट को लागू करना एक्सप्रेस मार्गों को कॉन्फ़िगर करने और साइट की विशिष्ट विशेषताओं को प्रोग्रामिंग करने जैसा है।

मिडलवेयर और कनेक्ट

पृष्ठों की सेवा में कई कार्य शामिल हैं। उन कार्यों में से कई अच्छी तरह से ज्ञात हैं और बहुत आम हैं, इसलिए नोड के कनेक्ट मॉड्यूल (नोड के तहत चलने के लिए उपलब्ध कई मॉड्यूलों में से एक) उन कार्यों को लागू करता है।
वर्तमान प्रभावशाली पेशकश देखें:

  • कस्टम प्रारूप समर्थन के साथ लकड़हारा अनुरोध लकड़हारा
  • सीएसआरएफ क्रॉस-साइट अनुरोध जालसाजी संरक्षण
  • संकुचित करें Gzip संपीड़न मिडलवेयर
  • BasicAuth मूल http प्रमाणीकरण
  • bodyParser एक्स्टेंसिबल अनुरोध बॉडी पार्सर
  • json एप्लीकेशन / json parser
  • urlencoded एप्लिकेशन / x-www-form-urlencoded पार्सर
  • मल्टीपार्ट मल्टीपार्ट / फॉर्म-डेटा पार्सर
  • टाइमआउट अनुरोध टाइमआउट
  • कुकीपैर कुकी कुकी पार्सर
  • बंडल मेमोरीस्टोर के साथ सत्र सत्र प्रबंधन का समर्थन
  • cookieSession कुकी-आधारित सत्र समर्थन
  • methodOverride faux HTTP मेथड सपोर्ट
  • responseTime, प्रतिक्रिया-समय की गणना करता है और X-Response-Time के माध्यम से प्रकट होता है
  • staticCache स्थिर के लिए मेमोरी कैश परत () मिडलवेयर
  • स्थिर स्ट्रीमिंग स्थिर फ़ाइल सर्वर समर्थन रेंज और अधिक
  • निर्देशिका निर्देशिका लिस्टिंग मिडलवेयर
  • vhost वर्चुअल होस्ट सब-डोमेन मैपिंग मिडलवेयर
  • फ़ेविकॉन कुशल फ़ेविकॉन सर्वर (डिफ़ॉल्ट आइकन के साथ)
  • सीमा अनुरोध अनुरोध निकायों की सीमा को सीमित करती है
  • क्वेरी स्वत: querystring पार्सर, पॉपिंग req.query
  • errorHandler लचीला त्रुटि हैंडलर

कनेक्ट फ्रेमवर्क है और इसके माध्यम से आप (उप) मॉड्यूल को चुन सकते हैं जो आपको चाहिए। योगदान मिडिलवेयर पेज अतिरिक्त की एक लंबी सूची विश्लेषण करता middlewares । एक्सप्रेस अपने आप में सबसे आम कनेक्ट मिडलवेर्स के साथ आता है।

क्या करें?

नोड स्थापित करें ।js.
नोड npm , नोड पैकेज मैनेजर के साथ आता है ।
कमांड npm install -g expressविश्व स्तर पर एक्सप्रेस डाउनलोड और स्थापित करेगा ( एक्सप्रेस गाइड की जांच करें )। कमांड लाइन में
चलना express foo(नोड में नहीं) फू के नाम से एक रेडी-टू-रन एप्लिकेशन बनाएगा। इसकी (नई बनाई गई) निर्देशिका को बदलें और इसे नोड के साथ कमांड के साथ चलाएं node <appname>, फिर खोलें http://localhost:3000और देखें। अब आप अंदर हैं।


3
शानदार जवाब धन्यवाद। यह हर ब्लॉग पोस्ट को याद रखने वाली सरल बकवास है, सरल सेटअप जो हो सकता है ??? अगर आपने पहले कभी ऐसा नहीं किया है। हाँ, यह आसान है जब आप पहले से ही कर चुके हैं, लेकिन आपके पास कोई सुराग नहीं है कि एफआईआरएसटी समय के लिए कैसे शुरू करें! मुझे इससे नफरत है जब ब्लॉग पोस्ट में देवों की अनदेखी है, यह आवश्यक है। मैं सेटअप खोजने के लिए सिर्फ एक और ब्लॉग पोस्ट को प्राप्त नहीं करना चाहता। बस अपने अन्य पोस्ट में एक अन्य ब्लॉग पोस्ट का लिंक प्रदान करें, यह बहुत उपयोगी है, इसलिए मुझे एक के लिए शिकार करने की आवश्यकता नहीं है। मुझे शिकार यात्रा बचाओ!
पॉजिटिव

3
एक्सप्रेस 4.0.0 को सुडो एनपीएम स्थापित करने की आवश्यकता है -g एक्सप्रेस-जेनरेटर
मुहम्मद-इब्राहिम

@getetbro का मतलब है निर्भरताएँ स्थापित करने के लिए आपको बस 'एनपीएम इंस्टाल' करना है।
टॉर्स्टन बर्थेल

16

कनेक्ट सामान्य प्रबंधन सर्वर जैसे सत्र प्रबंधन, प्रमाणीकरण, लॉगिंग और अधिक के लिए "उच्च स्तर" एपीआई प्रदान करता है। एक्सप्रेस को उन्नत (सिनात्रा जैसे) कार्यक्षमता के साथ कनेक्ट के शीर्ष पर बनाया गया है।


0

Node.jsअपने आप में एक HTTP मॉड्यूल प्रदान करता है, जिसकी createServer पद्धति एक ऐसी वस्तु लौटाती है जिसका उपयोग आप HTTP अनुरोधों का जवाब देने के लिए कर सकते हैं। वह वस्तु http.Serverप्रोटोटाइप को विरासत में मिली है ।


0

संबंधित जानकारी, खासकर यदि आप विज़ुअल स्टूडियो आईडीई के साथ काम करने के लिए एनटीवीएस का उपयोग कर रहे हैं। NTVS में NodeJS और Express दोनों उपकरण, स्कैफोल्डिंग, प्रोजेक्ट टेम्पलेट विजुअल स्टूडियो 2012, 2013 में जोड़े जाते हैं।

साथ ही, एक्सप्रेसजेएस या कनेक्ट को "वेबसर्वर" कहने वाली क्रिया गलत है। आप उनके साथ या उनके बिना एक बेसिक वेबसर्वर बना सकते हैं। एक मूल NodeJS कार्यक्रम http मॉड्यूल का उपयोग http अनुरोधों को संभालने के लिए भी कर सकता है, इस प्रकार एक अल्पविकसित वेब सर्वर बन जाता है।


0

जैसा कि नाम से पता चलता है कि मिडलवेयर वास्तव में मिडलवेयर के बीच में है .. बीच में क्या है? अनुरोध और प्रतिक्रिया के बीच .. कैसे अनुरोध, प्रतिक्रिया, एक्सप्रेस सर्वर इस तस्वीर में एक्सप्रेस ऐप में बैठते हैं आप देख सकते हैं कि अनुरोध क्लाइंट से आ रहे हैं तो एक्सप्रेस सर्वर सर्वर उन अनुरोधों की सेवा करता है .. फिर गहरी खुदाई करता है .. वास्तव में हम इसे विभाजित कर सकते हैं इस तरह से छोटे अलग कार्यों के लिए संपूर्ण एक्सप्रेस सर्वर का पूरा कार्य। मिडलवेयर अनुरोध और प्रतिक्रिया के बीच सर्वर के कुछ हिस्सों को कैसे काम करता है और अगले एक के लिए अनुरोध पारित कर दिया है के बीच बैठते हैं । आखिरकार सभी कार्यों की प्रतिक्रिया कर दी गई है .. सभी मध्य वेयर अनुरोध ऑब्जेक्ट, प्रतिक्रिया ऑब्जेक्ट और अनुरोध के अगले फ़ंक्शन तक पहुंच सकते हैं प्रतिक्रिया चक्र ।।

मिडलवेयर के लिए एक्सप्रेस यूट्यूब वीडियो में मिडलवेयर को समझाने के लिए यह अच्छा उदाहरण है


-7

बेवकूफ सरल जवाब

कनेक्ट और एक्सप्रेस नोडज के लिए वेब सर्वर हैं। अपाचे और आईआईएस के विपरीत, वे दोनों एक ही मॉड्यूल का उपयोग कर सकते हैं, जिसे "मिडलवेयर" कहा जाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.