मैंने यहां एक और तरीका अपनाया है। यह नहीं कह रहा कि यह सबसे अच्छा है, लेकिन मुझे समझाएं।
- प्रत्येक स्कीमा (और मॉडल) अपनी फ़ाइल (मॉड्यूल) में है
- किसी विशेष आरईएसटी संसाधन के लिए मार्गों का प्रत्येक समूह अपनी फ़ाइल (मॉड्यूल) में है
- प्रत्येक मार्ग मॉड्यूल बस
require
यह नेवला मॉडल की जरूरत है (केवल 1) - मुख्य फ़ाइल (आवेदन प्रविष्टि बिंदु) बस
require
सभी रूट मॉड्यूल उन्हें पंजीकृत करने के लिए। - मोंगो कनेक्शन रूट फ़ाइल में है और इसे पैरामीटर के रूप में पारित किया जाता है जिसकी आवश्यकता होती है।
मेरे ऐप रूट के अंतर्गत मेरे पास दो सबफ़ोल्डर हैं - routes
और schemas
।
इस दृष्टिकोण के लाभ हैं:
- आप स्कीमा केवल एक बार लिखते हैं।
- आप आरईएसटी संसाधन (सीआरयूडी) प्रति 4-5 मार्गों के लिए रूट पंजीकरण के साथ अपनी मुख्य ऐप फ़ाइल को प्रदूषित नहीं करते हैं
- आप DB कनेक्शन को केवल एक बार परिभाषित करते हैं
यहां बताया गया है कि एक विशेष स्कीमा फ़ाइल कैसी दिखती है:
फ़ाइल:/schemas/theaterSchema.js
module.exports = function(db) {
return db.model('Theater', TheaterSchema());
}
function TheaterSchema () {
var Schema = require('mongoose').Schema;
return new Schema({
title: { type: String, required: true },
description: { type: String, required: true },
address: { type: String, required: true },
latitude: { type: Number, required: false },
longitude: { type: Number, required: false },
phone: { type: String, required: false }
});
}
यहां बताया गया है कि किसी विशेष संसाधन के लिए मार्गों का संग्रह कैसा दिखता है:
फ़ाइल:/routes/theaters.js
module.exports = function (app, options) {
var mongoose = options.mongoose;
var Schema = options.mongoose.Schema;
var db = options.db;
var TheaterModel = require('../schemas/theaterSchema')(db);
app.get('/api/theaters', function (req, res) {
var qSkip = req.query.skip;
var qTake = req.query.take;
var qSort = req.query.sort;
var qFilter = req.query.filter;
return TheaterModel.find().sort(qSort).skip(qSkip).limit(qTake)
.exec(function (err, theaters) {
// more code
});
});
app.post('/api/theaters', function (req, res) {
var theater;
theater.save(function (err) {
// more code
});
return res.send(theater);
});
app.get('/api/theaters/:id', function (req, res) {
return TheaterModel.findById(req.params.id, function (err, theater) {
// more code
});
});
app.put('/api/theaters/:id', function (req, res) {
return TheaterModel.findById(req.params.id, function (err, theater) {
// more code
});
});
app.delete('/api/theaters/:id', function (req, res) {
return TheaterModel.findById(req.params.id, function (err, theater) {
return theater.remove(function (err) {
// more code
});
});
});
};
और यहाँ रूट एप्लिकेशन फ़ाइल है, जिसने कनेक्शन को इनिशियलाइज़ किया और सभी मार्गों को पंजीकृत किया:
फ़ाइल:app.js
var application_root = __dirname,
express = require('express'),
path = require('path'),
mongoose = require('mongoose'),
http = require('http');
var app = express();
var dbProduction = mongoose.createConnection('mongodb://here_insert_the_mongo_connection_string');
app.configure(function () {
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(application_root, "public")));
app.use('/images/tmb', express.static(path.join(application_root, "images/tmb")));
app.use('/images/plays', express.static(path.join(application_root, "images/plays")));
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
app.get('/api', function (req, res) {
res.send('API is running');
});
var theatersApi = require('./routes/theaters')(app, { 'mongoose': mongoose, 'db': dbProduction });
// more code
app.listen(4242);
आशा है कि यह मददगार था।