बड़ी Node.js परियोजनाओं को कैसे व्यवस्थित करें


82

बड़ी Node.js परियोजनाओं को व्यवस्थित करने के लिए कुछ अच्छे तरीके क्या हैं?

उदाहरण के लिए, एक app दोनों का उपयोग कर एक्सप्रेस। Js और socket.io? इसमें एप्लिकेशन लॉजिकल स्ट्रक्चर के साथ-साथ फाइलसिस्टम दोनों शामिल होंगे।

वर्तमान में, मैं खुद को एक ही मास्टर js फ़ाइल में कोड का एक टन shoving और एक विशाल वैश्विक वस्तु में कोड रखने के लिए पा रहा हूं, और यह बहुत ही सुखद लगता है।



मुझे यह पुस्तक खरीदनी पड़ सकती है, धन्यवाद!
थॉमस हंटर II

Google "जावास्क्रिप्ट मॉड्यूल" या "मॉड्यूलर जावास्क्रिप्ट" :-)
श्री

1
मैंने स्ट्रैज़स द्वारा सुझाई गई पुस्तक पढ़ी है, और यह बहुत अच्छी सलाह और विश्लेषण देता है, लेकिन मुझे डर है कि एक्सप्रेस के साथ एक नोड.जेएस एप्लिकेशन को संरचित करने के लिए अच्छी तरह से स्थानांतरित नहीं होता है। एक अच्छी शुरुआत फ़ाइल संरचना के कुछ सुझावों के लिंक के नीचे PuerkitoBio का जवाब; मैं आवश्यकतानुसार उस संरचना पर निर्माण करने की योजना बना रहा हूं।
आरोन

जवाबों:


97

एक शुरुआती उदाहरण

मुझे @ दाविद-एलिस से मूल रूप से चेक किया गया है और आपको इसे समझने के लिए गहराई से अध्ययन करना चाहिए क्योंकि यह एक अच्छा है। हालाँकि, मुझे यह पसंद आया होगा कि शुरुआती लोगों के लिए एक सीधा उदाहरण देखना चाहते हैं। यहाँ है कि मुझे क्या पसंद आया होगा कि कोई मुझे दिखा दे।

आइए एक विशिष्ट परिदृश्य दें जहां आप एक्सप्रेस का उपयोग कर रहे हैं और आपके पास अपने ऐप पर सूचीबद्ध बहुत सारे मार्ग हैं। जेएस फ़ाइल। इसकी सामग्री कुछ इस तरह दिखाई देगी:

app.js

// ... startup code omitted above

app.get('/', function(req, res) {
  res.render('index', { title : 'home' });
});
app.get('/contactus', function(req, res) {
  res.render('contactus', { title : 'contact us' });
});
app.get('/anotherpage', function(req, res) {
  res.render('anotherpage', { title : 'another page' });
});
// and so on...

आप सोच सकते हैं यदि आपके पास 50 मार्ग हैं, तो यह फ़ाइल काफी हद तक हाथ से निकल सकती है। यह अच्छा होगा कि इस अव्यवस्था में से कुछ को हटा दिया जाए।

आप जो कुछ भी करते हैं, वह आपके एप्लिकेशन में एक "कंट्रोलर" फ़ोल्डर बनाता है ताकि आपकी संरचना अब इस तरह दिखे:

app.js
/controllers

"Index.js" नामक "/ नियंत्रकों" के भीतर एक फ़ाइल बनाएँ, फिर निम्नलिखित कोड डालें।

/controllers/index.js

module.exports.set = function(app) {
   // copy your routes listed in your app.js directly into here
}

अपनी रूट सूची को अपनी "app.js" फ़ाइल से काटें और चिपकाएँ और उन्हें "/controllers/index.js" फ़ाइल में रखें।

अपने app.js फ़ाइल पर, अपने मार्गों को हटा दें और उनके स्थान पर निम्नलिखित कार्य करें।

app.js

// remove your routes and replace with this code
var controllers = require('./controllers');
controllers.set(app);

अब यदि आप अपनी "/controllers/index.js" फ़ाइल को विभाजित करना चाहते हैं, तो आइए एक और उदाहरण जोड़ते हैं ताकि आप देख सकें कि कैसे Node.js वास्तव में एक रूसी गुड़िया की तरह कार्य करता है कि इसका कोड कैसे व्यवस्थित किया जा सकता है।

"/ नियंत्रकों" के भीतर एक और फ़ाइल "account.js" जोड़ें और इसके भीतर निम्नलिखित रखें।

/controllers/account.js

module.exports.set = function(app) {
    // put more app route listings here
}

अब आपकी "/controllers/index.js फ़ाइल" के भीतर, "account.js" का संदर्भ दें

/controllers/index.js

var account = require('./account.js');

module.exports.set = function(app) {
   // your routes here

   // let "account.js" set other routes
   account.set(app);
}

जैसा कि आप कल्पना कर सकते हैं, आप चीजों को छोटे और छोटे भागों में तोड़कर रख सकते हैं और यदि आप चाहें तो "आवश्यकता" के साथ फ़ोल्डर और संदर्भ में अधिक फ़ोल्डर्स डाल सकते हैं। आप "/ lib" या लाइब्रेरी फ़ाइलों के लिए समान अवधारणा का उपयोग कर सकते हैं। "node_modules" पहले से ही ऐसा कर रहा है।

यह सिर्फ कई कारणों में से एक है। नोड.जेएस के साथ प्रोग्राम करना बहुत सुखद है।

प्रबंधनीय एक्सप्रेस 4 रूटिंग उदाहरण

यहाँ एक और पोस्ट मैंने व्यक्त किया है जो एक्सप्रेस 4 मार्गों के बारे में है जो इससे संबंधित है।

Express.js नेस्टेड राउटर के साथ आराम करें


IMHO यह अपडेट से पहले बेहतर था, आप एलियासिंग तंत्र को लागू करके प्रत्येक नियंत्रक के लिए एक नाम देने से बच सकते हैं, जहां एक मार्ग दूसरे में जाता है, यह कैनोनिकल URL के साथ भी मदद करता है
टिमो हुओवेंन

कैनोनिकल URL वाले हिस्से का बुरा न मानें, यह एक सोच-विचार था। विहित URL से मेरा तात्पर्य एक विहित <link>को जोड़ने से है जैसे कि /example/pathजब उपयोगकर्ता /example/path/पता बार (या अन्य तरीके से) में प्रवेश करता है।
टिमो हुओवेंन

आप जानते हैं, इस प्रकार के संगठित पदानुक्रम को प्राप्त करने के लिए एक प्रोग्रामर के रूप में स्वाभाविक है, लेकिन यह एक फ़ाइल खोलते समय, या एक चेकइन पढ़ते समय खुद को व्यावहारिक रूप से अच्छी तरह से उधार नहीं देता है। आप बड़ी संख्या में "index.js" के साथ समाप्त होंगे जो जल्दी से काम करने के लिए दर्दनाक हो जाता है।
अभिनव गुर्जर

एक साल बाद, मेरे लिए एक मूल्यवान पद। मैं सिर्फ एक सप्ताहांत परियोजना के लिए उपयोग करने के लिए नोड शुरू कर रहा हूं।
मैसफेनिक्स

@JasonSebring इतनी जानकारी है और मैं बहुत नया हूँ! मैं अभी बहुत खो गया हूं। गणित में एक स्नातक छात्र के रूप में मैं कई बार मैटलैब / आर / मैथमेटिका करता हूं लेकिन पिछली बार जब मैंने एक वेब / डेस्कटॉप फ्रेमवर्क को छुआ था तो नेट 2.0 दिनों में वापस आ गया था।
मासफिनिक्स

10

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

जाहिर है, इस सवाल का कोई निश्चित जवाब नहीं है, लेकिन यह देखना दिलचस्प है कि अन्य क्या कर रहे हैं, और मैं इस विषय पर अन्य राय के लिए सभी कान हूं (जो यहां भी चर्चा की गई थी , जहां आप मेरे सुझाव का सारांश देख सकते हैं) ।


उस लिंक के लिए धन्यवाद, यह एक अच्छा पढ़ा गया (Google अनुवाद की मदद से), और मुझे यकीन है कि मैं उस परियोजना के संगठन को डिजाइन करने में आपके कुछ सुझावों का पालन करूंगा, जो वर्तमान में मैं काम कर रहा हूं।
आरोन

क्या आप लिंक को ठीक कर सकते हैं?
येवहनी हेरसिमचुक ev ’

2

अन्य ब्लॉग पोस्ट के समान, मैंने विशेष रूप से Expressएप्लिकेशन को व्यवस्थित करने के बारे में लिखा है । यह वह विधि है जो मैं लगभग डेढ़ साल से उपयोग कर रहा हूं। मूल रूप से, अपने एप्लिकेशन को अपने डेटा एंटिटीज़ या किसी अन्य मुख्य तत्वों के आसपास व्यवस्थित करें। उन तत्वों में से प्रत्येक के लिए अपने स्वयं के निर्देशिकाओं में तर्क रखें। मैंने पायथन से बहुत अधिक उधार लेने की कोशिश की।

http://rycole.com/2013/01/28/organizing-nodejs-express.html


1

उनके लेख अब ऑनलाइन नहीं हैं, लेकिन एरिक सेटरविट की नोड श्रृंखला ने नीचे सूचीबद्ध के रूप में एक संरचना की सिफारिश की है।

# Project 
. 
|-- packages/
|   |-- project-core
|   |   |-- lib/
|   |   |-- commands/
|   |   |-- startup/
|   |   |-- conf/
|   |   |-- test/
|   |   |-- package.json
|   |   |-- README.md
|   |   |-- events.js
|   |   |-- .npmignore
|   |   `-- index.js
|-- package.json
`-- index.js

साथ packages/फ़ोल्डर प्रतिरूपकता के लिए अपने स्रोत में बदल।


0

यदि आप इस क्षेत्र में शुरुआती हैं, तो मेरा सुझाव है कि आप मौजूदा परियोजनाओं पर एक नज़र डालें, जो डेवलपर्स द्वारा पसंद की जाती हैं। उनमें से कुछ हैं:

  • Sails.js - 18k तारे। आप एक नज़र डाल सकते हैं कि उन्होंने मेरे द्वारा दिए गए लिंक पर एपीपी संरचना का आयोजन कैसे किया। एक महान वेबसाइट की संरचना में प्रत्येक फ़ोल्डर के लिए एक स्पष्टीकरण है।

  • एक्सप्रेसजेएस जनरेटर - 800 सितारे। Express.js के साथ काम करना शुरू करने के लिए बढ़िया और सरल टेम्पलेट है। यहां आप देख सकते हैं कि उन्होंने ऐप से रूट कैसे विभाजित किए हैं।

वैसे, इतने सारे डेवलपर्स ने आपका मामला पहले किया था, और आप इसे केवल कांटा और अपग्रेड कर सकते हैं।

  • कियोस्का । देखें कि वे events/फ़ोल्डर में घटनाओं को अलग-अलग फ़ाइलों में कैसे अलग करते हैं ।

  • बैलंस .io 2.3k तारे। दुर्भाग्य से, उनके पास एक फ़ाइल में पूरा सॉकेट सर्वर है, लेकिन आप नोड.js और सॉकेट.io के साथ ऐप की पूरी संरचना सीख सकते हैं।


0

यदि आप बुरा नहीं मानते हैं, तो आप हमेशा टाइपस्क्रिप्ट सीख सकते हैं और https://nestjs.com/ पर जा सकते हैं।

यदि आप जेएस के साथ रहना चाहते हैं तो मैं दृढ़ता से प्याज वास्तुकला का उपयोग करने की सलाह देता हूं। सबसे अच्छा अभ्यास अलग-अलग व्यावसायिक तर्क, नियंत्रकों, यहां तक ​​कि पुस्तकालयों को रखने के लिए है (उन्हें कुछ वर्गों / सहायकों के अंदर लपेटा जाना चाहिए) - बस मामले में, अगर आपको किसी अन्य पुस्तकालय (विभिन्न सीएसवी पार्सर आदि) में माइग्रेट करना होगा।

प्याज वास्तुकला के साथ, आप परवाह नहीं करते हैं कि अनुरोध कहां से आता है, यहां तक ​​कि कुछ संदेश दलाल को जोड़ने के लिए बहुत सारे बदलाव नहीं होंगे।

इसके अलावा यह प्रयास करें https://en.wikipedia.org/wiki/Domain-driven_design

ESLint उचित परियोजना संगठन के साथ मदद कर सकता है।

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