MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

node.js &express - глобални модули и най-добри практики за структура на приложението

Тук възприех друг подход. Не казвам, че е най-добрият, но нека обясня.

  1. Всяка схема (и модел) е в собствен файл (модул)
  2. Всяка група от маршрути за конкретен REST ресурс е в собствен файл (модул)
  3. Всеки маршрутен модул просто require с модела Mongoose, от който се нуждае (само 1)
  4. Основният файл (входна точка на приложението) просто require s всички маршрутни модули, за да ги регистрирате.
  5. Връзката Mongo е в основния файл и се предава като параметър на всеки, който има нужда от нея.

Имам две подпапки под корена на приложението си - routes и schemas .

Предимствата на този подход са:

  • Пишете схемата само веднъж.
  • Не замърсявате основния си файл на приложението с регистрации на маршрути за 4-5 маршрута на REST ресурс (CRUD)
  • Вие дефинирате 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);

Надявам се това да е било полезно.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Високопроизводителни MongoDB клъстери на Amazon EC2

  2. Защо MongoDB е толкова бърз

  3. Агрегиране в местната часова зона в mongodb

  4. Mongodb Запитване За избор на записи с даден ключ

  5. MongoDB $asinh