क्या Express.js अनुप्रयोग app.js
में फ़ाइल को तोड़ने और संशोधित करने के लिए एक आम सम्मेलन है ? या सब कुछ एक ही फाइल में रखना आम है?
क्या Express.js अनुप्रयोग app.js
में फ़ाइल को तोड़ने और संशोधित करने के लिए एक आम सम्मेलन है ? या सब कुछ एक ही फाइल में रखना आम है?
जवाबों:
मेरे पास मेरा टूटना इस प्रकार है:
~/app
|~controllers
| |-monkey.js
| |-zoo.js
|~models
| |-monkey.js
| |-zoo.js
|~views
| |~zoos
| |-new.jade
| |-_form.jade
|~test
| |~controllers
| |-zoo.js
| |~models
| |-zoo.js
|-index.js
मैं क्या प्रासंगिक है लौटने के लिए एक्सपोर्ट्स का उपयोग करता हूं। उदाहरण के लिए, मेरे द्वारा किए गए मॉडल में:
module.exports = mongoose.model('PhoneNumber', PhoneNumberSchema);
और फिर अगर मुझे फोन नंबर बनाने की आवश्यकता है, तो यह उतना ही सरल है:
var PhoneNumber = require('../models/phoneNumber');
var phoneNumber = new PhoneNumber();
अगर मुझे स्कीमा का उपयोग करने की आवश्यकता है, तो PhoneNumber.schema
(जो मानता है कि हम रूट फ़ोल्डर से काम कर रहे हैं और 1 स्तर ऊपर और फिर नीचे मॉडल पर जाने की आवश्यकता है)
एक्सप्रेस विकी इसके शीर्ष पर बनाया गया चौखटे की एक सूची है।
उनमें से, मुझे लगता है कि ट्विटर का मैटाडोर बहुत अच्छी तरह से संरचित है। हमने वास्तव में बहुत ही समान दृष्टिकोण का उपयोग किया कि वे कैसे ऐप के कुछ हिस्सों को लोड करते हैं।
derby.js भी बेहद दिलचस्प लग रहा है। यहसभी प्रचार के बिना उल्का के समान हैऔर वास्तव में क्रेडिट देता है जहां क्रेडिट देय है (विशेषकर, नोड और एक्सप्रेस)।
यदि आप CoffeeScript (I am not) के प्रशंसक हैं और Reeaeaaaaaally रेल्स का L & F चाहते हैं, तो टॉवर.जेएस भी है ।
यदि आप रेल से परिचित हैं और लोकोमोटिव है तो कुछ अवधारणाओं के ब्लीड-ओवर का बुरा मत मानना । यह एक्सप्रेस-वे पर बनाया गया एक हल्के वजन का ढांचा है। यह RoR के समान एक समान संरचना है और कुछ अधिक अल्पविकसित अवधारणाओं (जैसे रूटिंग) पर कार्य करता है।
यहां तक कि अगर आप इसे इस्तेमाल करने की योजना नहीं बनाते हैं तो भी यह जांचने लायक है।
नोडज्स-एक्सप्रेस-मेनगोज़-डेमो बहुत ही समान है कि मैंने अपनी संरचना कैसे की है। इसकी जांच - पड़ताल करें।
चेतावनी: संदर्भित कोड I ने नोड नॉकआउट के लिए एक साथ हैक किया, यह एक प्रकार का काम है लेकिन सुरुचिपूर्ण या पॉलिश से बहुत दूर है।
बंटवारे के बारे में अधिक विशिष्ट होने के लिए app.js
मेरे पास निम्नलिखित app.js फ़ाइल है
var express = require('express'),
bootstrap = require('./init/bootstrap.js'),
app = module.exports = express.createServer();
bootstrap(app);
मूल रूप से इसका मतलब है कि मैं अपने सभी बूटस्ट्रैपिंग को एक अलग फाइल में रखता हूं, फिर मैं सर्वर को बूटस्ट्रैप करता हूं।
तो बूटस्ट्रैप क्या करता है?
var configure = require("./app-configure.js"),
less = require("./watch-less.js"),
everyauth = require("./config-everyauth.js"),
routes = require("./start-routes.js"),
tools = require("buffertools"),
nko = require("nko"),
sessionStore = new (require("express").session.MemoryStore)()
module.exports = function(app) {
everyauth(app);
configure(app, sessionStore);
less();
routes(app, sessionStore);
nko('/9Ehs3Dwu0bSByCS');
app.listen(process.env.PORT);
console.log("server listening on port xxxx");
};
अच्छी तरह से यह सभी सर्वर इनिशियलाइज़ेशन सेटअप को अच्छी मात्रा में विभाजित करता है। विशेष रूप से
app.configure
)बस उदाहरण के लिए, रूटिंग फ़ाइल को देखें
var fs = require("fs"),
parseCookie = require('connect').utils.parseCookie;
module.exports = function(app, sessionStore) {
var modelUrl = __dirname + "/../model/",
models = fs.readdirSync(modelUrl),
routeUrl = __dirname + "/../route/"
routes = fs.readdirSync(routeUrl);
यहां मैं अपने सभी मॉडल और मार्गों को फाइलों की सरणियों के रूप में लोड करता हूं।
डिस्क्लेमर: readdirSync
केवल तभी ठीक होता है जब आपको http सर्वर (पहले .listen
) शुरू करने से पहले कॉल किया जाता है । सर्वर स्टार्ट टाइम पर सिंक्रोनस ब्लॉकिंग कॉल को कॉल करना कोड को और अधिक पठनीय बनाता है (यह मूल रूप से हैक है)
var io = require("socket.io").listen(app);
io.set("authorization", function(data, accept) {
if (data.headers.cookie) {
data.cookie = parseCookie(data.headers.cookie);
data.sessionId = data.cookie['express.sid'];
sessionStore.get(data.sessionId, function(err, session) {
if (err) {
return accept(err.message, false);
} else if (!(session && session.auth)) {
return accept("not authorized", false)
}
data.session = session;
accept(null, true);
});
} else {
return accept('No cookie', false);
}
});
यहाँ मैं socket.io को वास्तव में प्राधिकरण का उपयोग करने के लिए पंच करता हूं, फिर किसी भी टॉम और जैक को अपने सॉकेट.io सर्वर से बात करने देता हूं
routes.forEach(function(file) {
var route = require(routeUrl + file),
model = require(modelUrl + file);
route(app, model, io);
});
};
यहां मैं संबंधित मॉडल को रूट फ़ाइल से लौटाए गए प्रत्येक रूट ऑब्जेक्ट में पास करके अपने रूट शुरू करता हूं।
मूल रूप से जिस्ट आप सब कुछ अच्छा छोटे मॉड्यूल में व्यवस्थित करते हैं और फिर कुछ बूटस्ट्रैपिंग तंत्र है।
मेरे अन्य प्रोजेक्ट (मेरे ब्लॉग) में एक समान संरचना वाला एक इनिट फ़ाइल है ।
अस्वीकरण: ब्लॉग टूट गया है और निर्माण नहीं करता है, मैं इस पर काम कर रहा हूं।
बनाए रखने योग्य रूटिंग संगठन के लिए आप एक्सप्रेस-रूटस्कैन नोड मॉड्यूल के बारे में इस लेख की जांच कर सकते हैं और इसे आज़मा सकते हैं। यह मेरे लिए सबसे अच्छा समाधान है।
मेरे पास एक्सप्रेस-जनरेटर टूल के शीर्ष पर मेरे ऐप्स हैं। आप इसे चलाकर स्थापित कर सकते हैं npm install express-generator -g
और इसका उपयोग करके चला सकते हैं express <APP_NAME>
।
आपको एक परिप्रेक्ष्य देने के लिए, मेरे छोटे अनुप्रयोग की संरचना में से एक इस तरह दिखी:
~/
|~bin
| |-www
|
|~config
| |-config.json
|
|~database
| |-database.js
|
|~middlewares
| |-authentication.js
| |-logger.js
|
|~models
| |-Bank.js
| |-User.js
|
|~routes
| |-index.js
| |-banks.js
| |-users.js
|
|~utilities
| |-fiat-converersion.js
|
|-app.js
|-package.json
|-package-lock.json
इस संरचना के बारे में एक अच्छी बात यह है कि मैं अपने द्वारा विकसित किए गए किसी भी एक्सप्रेस एप्लिकेशन को अपनाता हूं, जिस तरह से मार्गों को व्यवस्थित किया जाता है। मैं app.js और app.use()
प्रत्येक मार्ग में प्रत्येक मार्ग फ़ाइलों की आवश्यकता होने के लिए पसंद नहीं था , खासकर के रूप में फ़ाइल बड़ा हो जाता है। जैसे, मैंने इसे अपने app.use()
./routes/index.js फ़ाइल पर समूह और सभी को केंद्रीकृत करने में मददगार पाया ।
अंत में, मेरा app.js कुछ इस तरह दिखेगा:
...
const express = require('express');
const app = express();
...
require('./routes/index')(app);
और मेरे ./routes/index.js कुछ इस तरह दिखेंगे:
module.exports = (app) => {
app.use('/users', require('./users'));
app.use('/banks', require('./banks'));
};
मैं केवल require(./users)
इसलिए सक्षम हूं क्योंकि मैंने एक्सप्रेस का उपयोग करके उपयोगकर्ताओं के मार्ग को लिखा था। राउटर () जो मुझे कई समूहों को "समूह" करने की अनुमति देता है और फिर उन्हें एक ही बार में निर्यात करता है, एप्लिकेशन को अधिक मॉड्यूलर बनाने के लक्ष्य के साथ।
यह इस बात का एक उदाहरण है कि आप मेरे / .आउटर्स / यूसर्स मार्ग पर क्या ठीक करेंगे:
const router = require('express').Router();
router.post('/signup', async (req, res) => {
// Signup code here
});
module.exports = router;
उम्मीद है कि यह आपके प्रश्न का उत्तर देने में मदद करेगा! शुभकामनाएँ!