जावास्क्रिप्ट को अच्छी तरह से जानने के बावजूद, मैं भ्रमित हूं कि वास्तव में Node.js पारिस्थितिकी तंत्र में ये तीन परियोजनाएं क्या हैं। क्या यह रेल के रैक जैसा कुछ है? क्या कोई समझा सकता है?
जावास्क्रिप्ट को अच्छी तरह से जानने के बावजूद, मैं भ्रमित हूं कि वास्तव में Node.js पारिस्थितिकी तंत्र में ये तीन परियोजनाएं क्या हैं। क्या यह रेल के रैक जैसा कुछ है? क्या कोई समझा सकता है?
जवाबों:
[ अपडेट: इसके ४.० रिलीज के रूप में, एक्सप्रेस अब कनेक्ट का उपयोग नहीं करता है। हालाँकि, एक्सप्रेस अभी भी कनेक्ट के लिए लिखे गए मिडलवेयर के साथ संगत है। मेरा मूल उत्तर नीचे है]
मुझे खुशी है कि आपने इस बारे में पूछा, क्योंकि यह निश्चित रूप से लोगों के लिए भ्रम की एक आम बात है जो Node.js. यहाँ यह समझाने में मेरा सबसे अच्छा शॉट है:
Node.js स्वयं एक http मॉड्यूल प्रदान करता है , जिसकी createServer
विधि एक वस्तु लौटाती है जिसका उपयोग आप HTTP अनुरोधों का जवाब देने के लिए कर सकते हैं। वह वस्तु http.Server
प्रोटोटाइप को विरासत में मिली है ।
कनेक्ट एक createServer
विधि भी प्रदान करता है , जो एक ऑब्जेक्ट देता है जो कि एक विस्तारित संस्करण को विरासत में देता है http.Server
। कनेक्ट के एक्सटेंशन मुख्य रूप से मिडलवेयर में प्लग करना आसान बनाते हैं । यही कारण है कि कनेक्ट खुद को "मिडलवेयर फ्रेमवर्क" के रूप में वर्णित करता है, और अक्सर रूबी की रैक के अनुरूप होता है।
एक्सप्रेस मॉड्यूल से कनेक्ट करने के लिए एक्सप्रेस कनेक्ट करता है: यह एक createServer
तरीका प्रदान करता है जो कनेक्ट के Server
प्रोटोटाइप को बढ़ाता है । तो कनेक्ट की सभी कार्यक्षमता वहाँ है, प्लस व्यू रेंडरिंग और मार्गों का वर्णन करने के लिए एक आसान डीएसएल। रूबी की सिनात्रा एक अच्छी उपमा है।
फिर अन्य ढांचे हैं जो आगे भी जाते हैं और एक्सप्रेस का विस्तार करते हैं! उदाहरण के लिए, ज़प्पा , जो कॉफीस्क्रिप्ट, सर्वर-साइड jQuery और परीक्षण के लिए समर्थन को एकीकृत करता है।
यहां "मिडलवेयर" के माध्यम से जो कुछ भी है उसका एक ठोस उदाहरण है: बॉक्स से बाहर, आपके लिए स्थिर फ़ाइलों में से कोई भी कार्य नहीं करता है। लेकिन बस connect.static
(एक मिडलवेयर जो कनेक्ट के साथ आता है) में फेंक दें , एक निर्देशिका को इंगित करने के लिए कॉन्फ़िगर किया गया है, और आपका सर्वर उस निर्देशिका में फ़ाइलों तक पहुंच प्रदान करेगा। एक्सप्रेस कनेक्ट के बिचौलियों को भी प्रदान करता है कि ध्यान दें; express.static
के रूप में ही है connect.static
। (दोनों को staticProvider
हाल तक जाना जाता था।)
मेरी धारणा यह है कि इन दिनों एक्सप्रेस के साथ अधिकांश "वास्तविक" Node.js ऐप विकसित किए जा रहे हैं; इसके द्वारा जोड़ी जाने वाली सुविधाएँ अत्यंत उपयोगी हैं, और निम्न-स्तरीय कार्यक्षमता के सभी अभी भी वहाँ हैं यदि आप इसे चाहते हैं।
स्वीकृत उत्तर वास्तव में पुराना है (और अब गलत है)। यहां कनेक्ट (3.0) / एक्सप्रेस (4.0) के वर्तमान संस्करण के आधार पर जानकारी (स्रोत के साथ) है।
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
:
.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
शीर्ष पर एक प्लगइन ढांचे के साथ आपका अच्छा पुराना है ।
एक्सप्रेसजेएस और कनेक्ट समानांतर परियोजनाएं हैं। कनेक्ट सिर्फ एक मिडिलवेयर फ्रेमवर्क है, जिसमें एक अच्छा use
फंक्शन है। एक्सप्रेस कनेक्ट ( पैकेज देखें ) पर निर्भर नहीं करता है । हालाँकि यह वह सब कुछ करता है जो कनेक्ट करता है अर्थात:
createServer
कनेक्ट के साथ पंजीकृत किया जा सकता है क्योंकि यह भी केवल एक फ़ंक्शन है जो req
/ res
जोड़ी ( स्रोत ) ले सकता है।listen
समारोह http के साथ खुद को पंजीकृत करने के लिएकनेक्ट क्या प्रदान करता है (जो डुप्लिकेट व्यक्त करते हैं) के अलावा, इसमें अधिक सुविधाओं का एक गुच्छा है। जैसे
use
ExpressJS के समारोह और कनेक्ट संगत है और इसलिए है मिडलवेयर साझा किया जाता है । दोनों मिडलवेयर फ्रेमवर्क हैं, एक्सप्रेस सिर्फ एक साधारण मिडलवेयर फ्रेमवर्क से अधिक है ।
मेरी राय: आपको अपनी पसंद बनाने के लिए ऊपर ^ पर आधारित पर्याप्त ^ सूचित किया जाता है।
http.createServer
यदि आप स्क्रैच से कनेक्ट / एक्सप्रेसजेज जैसा कुछ बना रहे हैं।http.createServer
ज्यादातर लोगों को बस एक्सप्रेसजेएस का उपयोग करना चाहिए।
हो सकता है कि ये कुछ समय के लिए सही हों, लेकिन अब गलत हैं:
जो HTTP.Server का एक विस्तारित संस्करण विरासत में मिला है
गलत। यह इसका विस्तार नहीं करता है और जैसा कि आपने देखा है ... इसका उपयोग करता है
एक्सप्रेस मॉड्यूल से कनेक्ट करने के लिए एक्सप्रेस कनेक्ट करता है
एक्सप्रेस 4.0 भी कनेक्ट पर निर्भर नहीं करता है। वर्तमान पैकेज देखें। Json निर्भरता अनुभाग
Node.js सर्वर साइड के लिए एक जावास्क्रिप्ट मोटर है।
सभी js क्षमताओं के अलावा, इसमें नेटवर्किंग क्षमताएं (जैसे HTTP), और फ़ाइल सिस्टम तक पहुंच शामिल है।
यह क्लाइंट-साइड js से भिन्न होता है, जहाँ नेटवर्किंग कार्यों को ब्राउज़र द्वारा एकाधिकार कर दिया जाता है, और सुरक्षा कारणों से फाइल सिस्टम तक पहुँच वर्जित है।
सर्वर में चलने वाला कुछ, HTTP को समझता है और वेब सर्वर की तरह लगता है। लेकिन यह एक नहीं है।
नोड.जेएस एक वेब सर्वर की तरह व्यवहार करता है जिसे इसे प्रोग्राम करना है: आने वाले HTTP अनुरोधों को संभालना और उचित प्रतिक्रियाएं प्रदान करना।
यह वही है जो एक्सप्रेस करता है: यह js में एक वेब सर्वर का कार्यान्वयन है।
इस प्रकार, एक वेब साइट को लागू करना एक्सप्रेस मार्गों को कॉन्फ़िगर करने और साइट की विशिष्ट विशेषताओं को प्रोग्रामिंग करने जैसा है।
पृष्ठों की सेवा में कई कार्य शामिल हैं। उन कार्यों में से कई अच्छी तरह से ज्ञात हैं और बहुत आम हैं, इसलिए नोड के कनेक्ट मॉड्यूल (नोड के तहत चलने के लिए उपलब्ध कई मॉड्यूलों में से एक) उन कार्यों को लागू करता है।
वर्तमान प्रभावशाली पेशकश देखें:
कनेक्ट फ्रेमवर्क है और इसके माध्यम से आप (उप) मॉड्यूल को चुन सकते हैं जो आपको चाहिए। योगदान मिडिलवेयर पेज अतिरिक्त की एक लंबी सूची विश्लेषण करता middlewares ।
एक्सप्रेस अपने आप में सबसे आम कनेक्ट मिडलवेर्स के साथ आता है।
नोड स्थापित करें ।js.
नोड npm , नोड पैकेज मैनेजर के साथ आता है ।
कमांड npm install -g express
विश्व स्तर पर एक्सप्रेस डाउनलोड और स्थापित करेगा ( एक्सप्रेस गाइड की जांच करें )। कमांड लाइन में
चलना express foo
(नोड में नहीं) फू के नाम से एक रेडी-टू-रन एप्लिकेशन बनाएगा। इसकी (नई बनाई गई) निर्देशिका को बदलें और इसे नोड के साथ कमांड के साथ चलाएं node <appname>
, फिर खोलें http://localhost:3000
और देखें। अब आप अंदर हैं।
Node.js
अपने आप में एक HTTP मॉड्यूल प्रदान करता है, जिसकी createServer पद्धति एक ऐसी वस्तु लौटाती है जिसका उपयोग आप HTTP अनुरोधों का जवाब देने के लिए कर सकते हैं। वह वस्तु http.Server
प्रोटोटाइप को विरासत में मिली है ।
संबंधित जानकारी, खासकर यदि आप विज़ुअल स्टूडियो आईडीई के साथ काम करने के लिए एनटीवीएस का उपयोग कर रहे हैं। NTVS में NodeJS और Express दोनों उपकरण, स्कैफोल्डिंग, प्रोजेक्ट टेम्पलेट विजुअल स्टूडियो 2012, 2013 में जोड़े जाते हैं।
साथ ही, एक्सप्रेसजेएस या कनेक्ट को "वेबसर्वर" कहने वाली क्रिया गलत है। आप उनके साथ या उनके बिना एक बेसिक वेबसर्वर बना सकते हैं। एक मूल NodeJS कार्यक्रम http मॉड्यूल का उपयोग http अनुरोधों को संभालने के लिए भी कर सकता है, इस प्रकार एक अल्पविकसित वेब सर्वर बन जाता है।
जैसा कि नाम से पता चलता है कि मिडलवेयर वास्तव में मिडलवेयर के बीच में है .. बीच में क्या है? अनुरोध और प्रतिक्रिया के बीच .. कैसे अनुरोध, प्रतिक्रिया, एक्सप्रेस सर्वर इस तस्वीर में एक्सप्रेस ऐप में बैठते हैं आप देख सकते हैं कि अनुरोध क्लाइंट से आ रहे हैं तो एक्सप्रेस सर्वर सर्वर उन अनुरोधों की सेवा करता है .. फिर गहरी खुदाई करता है .. वास्तव में हम इसे विभाजित कर सकते हैं इस तरह से छोटे अलग कार्यों के लिए संपूर्ण एक्सप्रेस सर्वर का पूरा कार्य। मिडलवेयर अनुरोध और प्रतिक्रिया के बीच सर्वर के कुछ हिस्सों को कैसे काम करता है और अगले एक के लिए अनुरोध पारित कर दिया है के बीच बैठते हैं । आखिरकार सभी कार्यों की प्रतिक्रिया कर दी गई है .. सभी मध्य वेयर अनुरोध ऑब्जेक्ट, प्रतिक्रिया ऑब्जेक्ट और अनुरोध के अगले फ़ंक्शन तक पहुंच सकते हैं प्रतिक्रिया चक्र ।।
मिडलवेयर के लिए एक्सप्रेस यूट्यूब वीडियो में मिडलवेयर को समझाने के लिए यह अच्छा उदाहरण है