Node.js के साथ ब्राउज़र-सामना करने वाले अनुप्रयोगों को बनाना थकाऊ हो जाता है। Express.js एक है जावास्क्रिप्ट फ्रेमवर्क Node.js वातावरण में होस्ट किए गए एकल पृष्ठ और बहु-पृष्ठ अनुप्रयोगों के लिए समर्पित।
यह मौलिक वेब ऐप सुविधाओं की एक पतली परत प्रदान करता है जो नोड.जेएस सुविधाओं को अस्पष्ट नहीं करेगा जो आप पहले से परिचित हैं, इसलिए आप सुनिश्चित कर सकते हैं कि आपका तैयार ऐप प्रदर्शन-वार को खरोंच करने के लिए तैयार होगा। और यह मजबूत एपीआई बनाने के लिए भी बहुत अच्छा है, HTTP उपयोगिता विधियों और मिडलवेयर के उपयोग के लिए तैयार होने के लिए धन्यवाद।
यदि आप कम जटिल विकल्प चाहते हैं, तो आप कोडिंग के बिना साइट बना सकते हैं [3 9] वेबसाइट निर्माता
। किसी भी तरह से, सुनिश्चित करें कि आप अपना प्राप्त करें [3 9] वेब होस्टिंग सेवा सही। शुरू करना चाहते हैं? एक्सप्रेस.जेएस के बारे में आपको क्या जानने की आवश्यकता है।
Express.js खुद को 'unopinionated' होने की प्रशंसा करता है - यानी, ढांचा डेवलपर को आर्किटेक्चर, टेम्पलेटिंग और मार्कअप इंजनों के संदर्भ में मिश्रण और मिलान करने की अनुमति देता है। अफसोस की बात है, महान शक्ति के साथ बड़ी जिम्मेदारी आती है।
एक्सप्रेस डेवलपर टीम एक प्रोजेक्ट जनरेटर को पेश करके झटका को नरम करना चाहता है (यदि आप एक टीम के साथ डिजाइन कर रहे हैं, तो सर्वश्रेष्ठ तैनात करें [3 9] घन संग्रहण
चीजों को एकजुट रखने के लिए)। यह एनपीएम पैकेज के रूप में आपके वर्कस्टेशन में आता है, और निम्नलिखित ढांचे के साथ हमारे प्रयोगों की सहायता करेगा: तमन @ तमन-थिंकपैड: ~ / डेस्कटॉप /
सामान / 2018AUG / FUTUREEXPRESSJS /
वर्कस्पेस $ sudo npm स्थापित करें
एक्सप्रेस-जेनरेटर-जी
जनरेटर में परियोजना विकल्पों के दर्जनों भी शामिल हैं - इस चरण के साथ आकृति पूर्ण सहायता आउटपुट दिखाती है। सादगी के लिए, हम खुद को डिफ़ॉल्ट सेटिंग्स के आधार पर एक परियोजना के लिए सीमित कर देंगे। इसके साथ अपनी पीढ़ी की प्रक्रिया को बंद करें:
तमन @ तमन-थिंकपैड: ~ / डेस्कटॉप /
सामान / 2018AUG / FUTUREEXPRESSJS /
वर्कस्पेस $ एक्सप्रेस फ़्यूचरेस्ट
चेतावनी: डिफ़ॉल्ट दृश्य इंजन भविष्य में रिलीज में जेड नहीं होगा। [7 9]
जब किया जाता है, तो वर्तमान कार्य निर्देशिका में 'फ़्यूचरटेस्ट' नामक एक नया फ़ोल्डर होता है। यह हमारे परीक्षण परियोजना का घर है और एनपीएम के पैकेज डाउनलोड कमांड का उपयोग करके कॉन्फ़िगर किया जाना चाहिए। लेखन के समय, जनरेटर में जेड व्यू जनरेटर शामिल होता है - परियोजना को निकट भविष्य में इसे बदलने की योजना है, जो आपको व्यू इंजन का चयन करने वाले पैरामीटर में पारित करने के लिए बाध्य है। वैकल्पिक रूप से, पग के उपयोग का अनुरोध करें - यह जेड इंजन का आधिकारिक उत्तराधिकारी है:
सीडी भविष्यवाणी /
एनपीएम इंस्टॉल
अब जब प्रोजेक्ट जनरेटर ने अपनी बात पूरी की है, तो हमें पसंद के एक संपादक में app.js खोलें। इसकी - बहुत संक्षिप्त - संरचना स्वयं को निम्नलिखित के रूप में प्रस्तुत करती है:
[8 9] var indexrouter = आवश्यकता (') मार्ग / सूचकांक '); var userrouter = आवश्यकता ('./ मार्ग / उपयोगकर्ता '); वार ऐप = एक्सप्रेस (); // व्यू इंजन सेटअप app.set ('विचार', path.join (__ Dirname, 'विचार')); app.set ('व्यू इंजन', 'जेड'); app.use (लॉगर ('देव')); app.use (express.json ()); app.use (express.urlencoded ({ विस्तारित: FALSE})); app.use (cookiparser ()); app.use (express.static (पथ)। शामिल हों (__ Dirname, 'सार्वजनिक'))));Express.js अत्यधिक मॉड्यूलर है। App.js एक प्रविष्टि बिंदु के रूप में कार्य करता है, जहां एक या अधिक 'उपयोग ()' कार्य विभिन्न अनुरोधों को संभालने के लिए इच्छित घटकों को जोड़ने की अनुमति देते हैं। 'सेट ()' के इनोक्तियों को इंजन में पैरामीटर समायोजित करने दें - जिनमें से एक पिछले चरण में उल्लिखित जेड व्यू इंजन की स्थापना है।
राउटर कक्षाओं में वेब सामग्री का वास्तविक उत्सर्जन होता है। ब्रेविटी के लिए, आइए इंडेक्स.जेएस को खुद को सीमित करें:
[8 9] वीएआर एक्सप्रेस = आवश्यकता ('एक्सप्रेस'); var राउटर = Express.Router (); राउटर.जेट ('/', फ़ंक्शन (req, res, अगला) { res.render ('इंडेक्स', {शीर्षक: 'एक्सप्रेस'}); }); module.exports = राउटर;'प्राप्त करें ()' एक मैचर स्ट्रिंग और एक इवेंट हैंडलर के साथ प्रदान किया जाता है जो एक संबंधित घटना होने पर आमंत्रित हो जाता है। हमारे मामले में, चुने गए टेम्पलेट इंजन की रेंडर विधि को लॉग इन करने वाले उपयोगकर्ता के ब्राउज़र पर सामग्री वापस करने के लिए कहा जाता है।
इस बिंदु पर, हम पहली बार स्पिन के लिए वेबसाइट लेने के लिए तैयार हैं। Express.js स्थापना वाले टर्मिनल पर लौटें, और डीबग ध्वज सेट के साथ एनपीएम पर कॉल करें:
डीबग = MyApp: * एनपीएम शुरू
पूर्ण होने पर, प्रोजेक्ट जनरेटर द्वारा बनाए गए मचान को देखने के लिए पसंद के ब्राउज़र में http: // localhost: 3000 / दर्ज करें। जब किया, दबाएं [3 9] सीटीआरएल
+ [3 9] सी विंडो को बंद करने और कमांड लाइन इंटरप्रेटर पर नियंत्रण वापस करने के लिए - ध्यान रखें कि यह डीबगिंग वेब सर्वर को भी बंद कर देता है।
सादगी के लिए, आइए हम सहमत हैं कि एक वेब एप्लिकेशन आमतौर पर प्रवेश बिंदुओं के अनुक्रम से बना होता है। Express.js इन राउटर क्लास के माध्यम से इसे संभालता है - इसे आने वाले अनुरोध के जवाब में बुलाए गए तरीकों के भंडार के रूप में सोचें।
एक आवेदन के लिए एक नया एंडपॉइंट जोड़ना कतार में एक नया कार्यकर्ता जोड़कर पूरा किया जाता है। हमारे ऑटो-जेनरेट किए गए उदाहरण दो राउटर प्रकार बनाता है, जिनमें से प्रत्येक को 'आवश्यकता' विधि का उपयोग करके उठाया जाता है:
[8 9] var indexrouter = आवश्यकता (') मार्ग / सूचकांक '); var userrouter = आवश्यकता ('./ मार्ग / उपयोगकर्ता ');अगले चरण में, 'app.use' राउटर पंजीकृत करता है और उन्हें अनुरोध स्ट्रिंग से जोड़ता है। हमारे कोड के अलावा एक त्रुटि हैंडलर जोड़ता है जो सिस्टम में गैर-मौजूदा यूआरएल दर्ज किया जाता है, तो एक त्रुटि हैंडलर जोड़ता है:
[8 9] app.use ('/', indexrouter); app.use ('/ उपयोगकर्ता', उपयोगकर्ता रौटर); app.use (फ़ंक्शन (REQ, Res, अगला) { अगला (CreateError (404)); });उपयोगकर्ताओं को खोलें, और नीचे इसके कोड को संशोधित करें:
[8 9] राउटर.गेट ('/ यूजर 1', फ़ंक्शन (req, रेज, अगला) { res.send ('भविष्य नमस्ते कहते हैं 1 '); }); राउटर.जेट ('/', फ़ंक्शन (req, res, अगला) { res.send ('के साथ जवाब दें संसाधन'); });Express.js में नए मार्ग जोड़ना एक यांत्रिक प्रक्रिया है। राउटर ऑब्जेक्ट को पसंद करें, और उस http क्रिया से संबंधित विधि का आह्वान करें जिसे आप संभालना चाहते हैं। इसके बाद, एक स्ट्रिंग में पास करें जिसे 'App.use' के साथ पंजीकृत 'ऑफ़सेट' में जोड़ा जाएगा। उस पल से, http: // localhost दोनों: 3000 / उपयोगकर्ता / उपयोगकर्ता 1 और http: // localhost: 3000 / उपयोगकर्ता / एक वैध प्रतिक्रिया वापस करें।
ध्यान रखें कि express.js 'प्राप्त' संसाधनों को संभालने के लिए सीमित नहीं है। 'पोस्ट ()', 'पुट ()' और 'डिलीट ()' पारंपरिक चार HTTP अनुरोधों को संभालें, जो अधिक असामान्य आवश्यकताओं को पूरा करने वाले दर्जनों अतिरिक्त क्रिया विधियों के दर्जनों के साथ। अंत में, 'req' ऑब्जेक्ट अनुरोध शीर्षलेख तक पहुंच प्रदान करता है - पैरामीटर या क्लाइंट जानकारी को पार्स करते समय इसे अच्छे उपयोग पर रखें।
हाथ से मार्ग जोड़ने से प्रोग्राम जटिलता बढ़ती है। एक्सप्रेस.जेएस वाइल्डकार्ड और नियमित अभिव्यक्ति समर्थन दोनों को पेश करके इस समस्या के लिए पूरा करता है। उदाहरण के लिए, निम्नलिखित घोषणाओं को देखें जो चरित्र अनुक्रम कुत्ते वाले विभिन्न तारों के खिलाफ मेल खाने के लिए नियमित अभिव्यक्ति का उपयोग करता है।
[8 9] app.get (/.* कुत्ते $ /, समारोह (req, res) { ...})चार HTTP अनुरोधों को संभालने के दौरान किसी के लिए पर्याप्त होना चाहिए (बिल गेट्स को टोपी टिप), express.js अतिरिक्त प्रोटोकॉल के साथ भी काम कर सकते हैं। एक्सप्रेस-डब्ल्यूएस इस खंड के लिए एक विशेष रूप से स्वादिष्ट उम्मीदवार है - यह वेबसेट संचार को शामिल करने के लिए Express.js की पहुंच बढ़ाता है।
एक बार प्लगइन को मुख्य Express.js प्रोजेक्ट में जोड़ा जाता है, इसे सक्षम करने को 'आवश्यकता' कॉल के माध्यम से पूरा किया जाता है। यह एक सहायक वस्तु देता है जिसमें सभी एक विधि होती है - राउटर और प्लगइन के बीच एक कनेक्शन स्थापित करने के लिए इसे कॉल करें:
[8 9] var expressws = आवश्यकता ('एक्सप्रेस- WS ') ऐप); उसके बाद, 'डब्ल्यूएस ()' नामक एक नई विधि को वेबॉकेट तकनीक के आधार पर नए मार्ग जोड़ने के लिए आमंत्रित किया जा सकता है: app.ws ('/', समारोह (डब्ल्यूएस, req) { डब्लूएस.ओएन ('संदेश', फ़ंक्शन (MSG) { Console.log (MSG); }); Console.log ('सॉकेट', req। परिक्षण); });'डब्ल्यूएस' ऑब्जेक्ट की उपस्थिति के कारण उनका प्रोटोटाइप सामान्य मार्गों से अलग है - यह कनेक्शन के लिए ज़िम्मेदार ग्राहक से जुड़े अंतर्निहित वेबॉर्कॉकेट इंस्टेंस तक पहुंच प्रदान करता है।
Node.js पर आधारित होने का अर्थ है कि वेब-आधारित अनुप्रयोगों पर काम करते समय समृद्ध प्लगइन पारिस्थितिक तंत्र आपके आदेश पर है। उदाहरण के लिए, एसक्यूएल और एनओएसक्यूएल डेटाबेस तक पहुंच - आमतौर पर एक असाधारण थकाऊ कार्य - डेटाबेस विक्रेताओं द्वारा प्रदान किए गए प्लगइन्स का उपयोग करके संभाला जा सकता है। वास्तविक परिनियोजन आवश्यक एनपीएम मॉड्यूल स्थापित करने जितना आसान है - यदि आपका कोड रेडिस डेटाबेस तक पहुंचना है, तो बस निम्न जोड़ें:
[8 9]var redis = आवश्यकता ('Redis') var क्लाइंट = redis.createclient () client.set ('स्ट्रिंगकी', 'अवल', Redis.Print) । । ।बेशक, इन-मेमोरी SQLite भी समर्थित है:
[8 9] var sqlite3 = आवश्यकता ('SQLITE3')। Verbose () वार डीबी = नया SQLite3। डेटाबेस (': मेमोरी:') db.serialize (समारोह () { db.run ('टेबल लोरेम बनाएं (जानकारी पाठ) ')ध्यान रखें कि node.js एकीकरण डेटाबेस प्लगइन्स तक ही सीमित नहीं है। साहसी डेवलपर्स टेसल जैसे उत्पादों को शामिल करने के लिए जा सकते हैं, जिससे वेब अनुप्रयोग भी शामिल हो सकते हैं जो साथ बातचीत कर सकते हैं चीजों की इंटरनेट उपकरण।
एक क्षेत्र जहां सरल और वास्तविक कार्यक्रम भिन्न होते हैं, विचारों का निर्माण होता है। जबकि एक छोटी सी उदाहरण परियोजना आमतौर पर हाथ से तैयार तारों का उपयोग करती है, जुड़े हुए चीजों की एक स्ट्रिंग के साथ एचटीएमएल के बड़े स्वैथ को इकट्ठा करना बेहद परेशान होता है।
टेम्पलेट इंजन एक साफ कामकाज प्रदान करते हैं। वे पूर्वनिर्धारित स्कीमा फ़ाइलों के निर्माण की अनुमति देते हैं, जिन्हें निष्पादन में प्रोग्रामेटिक रूप से आबादी की जा सकती है।
हमारे उदाहरण कार्यक्रम के मामले में, विचारों में शामिल हैं। जेडेड फाइलें। उद्घाटन सूचकांक निम्नलिखित संरचना का खुलासा करता है:
[8 9] लेआउट बढ़ाता है ब्लॉक सामग्री H1 = शीर्षक पी # {शीर्षक} में आपका स्वागत हैघुंघराले ब्रैकेट में संलग्न अभिव्यक्तियां टेम्पलेट फ़ील्ड के रूप में कार्य करती हैं जिनके मूल्यों को रनटाइम पर प्रतिस्थापित किया जाना है। Index.js एक पैरामीटर ऑब्जेक्ट के साथ प्रस्तुत करता है, जिससे इस चरण के साथ आकृति में दिखाए गए प्रारंभ पृष्ठ की प्रतिपादन की ओर अग्रसर होता है:
[8 9] राउटर.गेट ('/', फ़ंक्शन (req, res, अगला) { res.render ('इंडेक्स', {शीर्षक: 'एक्सप्रेस'}); });अधिकांश टेम्पलेटिंग इंजन आइटम टेम्पलेट के साथ प्रदान किए जाने पर सरणी भी पार्स कर सकते हैं। इस मामले में, सरणी की प्रत्येक पंक्ति डोम मॉडल के एक उदाहरण के साथ प्रदर्शित होती है - एंड्रॉइड में पाए गए सूची प्रदर्शन मॉडल की समानता पूरी तरह से संयोग है। Express.js पूर्वनिर्धारित टेम्पलेटिंग इंजन तक ही सीमित नहीं है। क्या आपको किसी कारण से अपना खुद का रोलिंग करना चाहिए, बस उल्लिखित चरणों का पालन करें यहां - सिद्धांत रूप में, आपको एक समारोह के अलावा सभी को ओवरराइड करना होगा।
Express.js अनुप्रयोगों में सीएसएस फाइलें और चित्र होते हैं। रेंडर फ़ंक्शन के माध्यम से इन्हें सेवा करना अक्षम है - एक बेहतर तरीका उन्हें पारंपरिक HTTP अनुरोध के साथ अपने मीरा तरीके पर भेजने में शामिल होगा। यह 'express.static ()' फ़ंक्शन के माध्यम से हासिल किया जा सकता है, जो पूरे फ़ोल्डरों को निर्यात के लिए चिह्नित कर सकता है:
App.use (Express.static ('सार्वजनिक'))
app.use (express.static ('फ़ाइलें'))
अंत में, हमें जल्द ही मिडलवेयर शब्द का उल्लेख करने की अनुमति दें। Express.js Palrance में, मिडलवेयर एक या अधिक घटकों का एक सेट है जो विपरीत रूप से दिखाए गए फ्लोचार्ट में खुद को एकीकृत करता है। तब वे अनुरोधों को संशोधित करने के लिए उपयोग किए जा सकते हैं क्योंकि वे रूटिंग सिस्टम से गुजरते हैं - सही ढंग से लागू किए जाने पर, असीमित कार्यक्षमता हासिल की जा सकती है।
इसके अलावा, कुछ तैयार घटकों को पाया जा सकता है [22 9] यहां
- बड़े पैमाने पर विकास परियोजना शुरू करने से पहले इस साइट पर जाएं।
परीक्षण express.js- आधारित अनुप्रयोग आसान है। समस्याएं तब होती हैं जब आप पृष्ठ को तीसरे पक्ष के लिए सुलभ होना चाहते हैं - इसे नोड.जेएस पर्यावरण द्वारा उत्पन्न होने के कारण, वेब होस्टिंग सेवाओं में एफ़टीपी परिनियोजन के लिए एक स्थिर छवि फिट करने का कोई तरीका नहीं है।
सिद्धांत रूप में, रास्पबेरी पीआई, एक ऑरेंजपी, एक समर्पित सर्वर या क्लाउड सेवा या एक वेब होस्ट प्रदाता से किराए पर वर्चुअल मशीन का उपयोग करने के खिलाफ कुछ भी नहीं है जो वर्चुअल होस्टिंग प्रदान करता है। हालांकि, एक पूर्ण वर्चुअल मशीन किराए पर लेना आपको निष्पादन पर्यावरण और ऑपरेटिंग सिस्टम को अद्यतित रखने की जिम्मेदारियों के साथ बोझ कर सकता है।
यदि यह कार्य आपके स्वाद के लिए नहीं है, तो एक मंच-ए-ए-सेवा प्रदाता अधिक आकर्षक हो सकता है (हालांकि, ज्यादातर मामलों में, बहुत मूल्यवान) पसंद।
कई डेवलपर हेरोकू मानते हैं, इस बॉक्सआउट के साथ आकृति में दिखाए गए मूल्य निर्धारण के साथ, नोड.जेएस होस्टिंग से संबंधित सभी चीजों के लिए स्वर्ण मानक होने के लिए।
हालांकि, यह सच में थोड़ा अनुचित है - अमेज़ॅन के लोचदार बीनस्टॉक, Google के क्लाउड प्लेटफ़ॉर्म और माइक्रोसॉफ्ट के एज़ूर सभी नोड.जेएस-आधारित पेलोड के दूरस्थ निष्पादन के लिए समान समर्थन प्रदान करते हैं। इन सभी प्रणालियों में, मुख्य मुद्दा संचालन कर रहा है - जबकि एज़ूर को धीमी तैनाती के लिए जाना जाता है, अन्य प्रदाताओं को बोझ डेवलपर्स बेहद जटिल विन्यास प्रणालियों की कठिन-उपयोग की पिछली अंत सेवाओं के साथ।
इसके अलावा, node.js पर्यावरण का समर्थित संस्करण प्रदाता से प्रदाता से अलग है। बेशक, हमारे पास गहराई में विषय को कवर करने के लिए पर्याप्त जगह नहीं है। यात्रा मोज़िला के तैनाती ट्यूटोरियल और express.js ' प्रदर्शन और विश्वसनीयता तथा सुरक्षा शामिल कुछ मुद्दों के लिए सबसे अच्छा अभ्यास पृष्ठ। अधिक सर्वोत्तम प्रथाओं को प्राप्त करने के लिए प्रदाता के दस्तावेज़ीकरण को देखना सुनिश्चित करें।
Express.js का विकास चक्र चिकनी से बहुत दूर है: डेवलपर्स अक्सर एपीआई परिवर्तनों के लिए जाने जाते हैं जो क्लाइंट कोड के पुनर्लेखन की आवश्यकता होती है। 3.x से 4.x तक स्विच विशेष रूप से दर्दनाक था, यही कारण है कि 5.x की आने वाली रिलीज आप में से कुछ को असहज महसूस कर सकती है।
जबकि express.js 5.0 कुछ तोड़ने वाले बदलावों के साथ लाता है, उनका प्रभाव अधिक सीमित है। सबसे पहले, पहले से-बहिष्कृत कार्यों का एक सेट वास्तविक के लिए हटा दिया जाता है - यदि कोड अभी भी उनका उपयोग करता है, 5.x को अपग्रेड करने के लिए रखरखाव की आवश्यकता होती है।
व्यू इंजन के डिजाइनरों को 'res.render () की जांच करने की आवश्यकता है:' रेंडरर्स को देखने के संबंध में रैंक वृद्धि, जिसने कुछ सिंक्रोनस कार्यान्वयन के माध्यम से फिसलने का नेतृत्व किया है। फ्रेमवर्क का संस्करण 5 एसिंक्रोनस प्रतिपादन को लागू करके प्रदर्शन को बढ़ाता है।
इसके अलावा, सैंड्री सुधार और परिवर्तनों का एक सेट दस्तावेज [2 9 5] यहां
पिछले संस्करणों से कुछ विलुप्त सुविधाओं की वापसी को देखता है - इसके अलावा, कुछ लंबी अवधि की बग नई रिलीज में तय की जाएगी।अंत में, ध्यान रखें कि आप पहले से ही नए संस्करण का प्रयास कर सकते हैं। बस अपने स्रोत कोड की एक प्रति बनाएं, टर्मिनल को पकड़ें और बाद में परीक्षण किए गए रक्तस्राव-किनारे जावास्क्रिप्ट के संग्रह के लायक को डाउनलोड करने के लिए निम्न आदेश दर्ज करें। सुरक्षित रहना।
$ एनपीएम इंस्टॉल एक्सप्रेस @ & gt; = 5.0.0-
अल्फा.1 --सेव
यह लेख मूल रूप से क्रिएटिव वेब डिज़ाइन पत्रिका वेब डिज़ाइनर के अंक 279 में प्रकाशित किया गया था। [7 9] यहां अंक 279 खरीदें [7 9] या [7 9] वेब डिजाइनर की सदस्यता लें [7 9] । [7 9]
[3 9] संबंधित आलेख:
गर्दन और कंधों को कैसे आकर्षित करना सीखते हैं, तो यह अक्सर हमारे काम में व�..
गति में मांसपेशियों को आकर्षित करने के बारे में ज..
(छवि क्रेडिट: जेसन पार्नेल-ब्रूक्स) [1 9] पर क�..
(छवि क्रेडिट: भविष्य) [1 9] समकालीन वेब और ऐप डि�..
कुछ साल पहले, ल्यूसिड गेम्स के आर्ट डायरेक्टर ने �..
वर्षों में कई क्रॉस-प्लेटफार्म मोबाइल ढांचे रहे �..
अधिक से अधिक बार, डिजाइनर और डेवलपर्स के संदर्भ म�..
चित्रकारी एक पोर्ट्रेट एक कठिन काम हो सकता है। भल..