MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

node.js &express - modul global &praktik terbaik untuk struktur aplikasi

Saya telah mengambil pendekatan lain di sini. Tidak mengatakan itu yang terbaik, tapi izinkan saya menjelaskannya.

  1. Setiap skema (dan model) ada dalam file (modul) sendiri
  2. Setiap grup rute untuk sumber REST tertentu ada di file (modul) mereka sendiri
  3. Setiap modul rute hanya require adalah model luwak yang dibutuhkan (hanya 1)
  4. File utama (titik masuk aplikasi) hanya require s semua modul rute untuk mendaftarkannya.
  5. Koneksi Mongo ada di file root dan diteruskan sebagai parameter untuk apa pun yang membutuhkannya.

Saya memiliki dua subfolder di bawah root aplikasi saya - routes dan schemas .

Manfaat dari pendekatan ini adalah:

  • Anda hanya menulis skema sekali.
  • Anda tidak mencemari file aplikasi utama Anda dengan pendaftaran rute untuk 4-5 rute per sumber daya REST (CRUD)
  • Anda hanya menentukan koneksi DB satu kali

Berikut adalah tampilan file skema tertentu:

File:/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 }
    });
}

Berikut adalah tampilan kumpulan rute untuk sumber daya tertentu:

File:/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
        });
      });
    });
};

Dan inilah file aplikasi root, yang menginisialisasi koneksi dan mendaftarkan semua rute:

File: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);

Semoga bermanfaat.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana cara mengonversi dari string ke tipe data tanggal?

  2. cara mengunduh file yang disimpan di gridFS menggunakan nodeJS

  3. Cara Membuat Indeks dengan Nama Tertentu di MongoDB

  4. Gunakan $gte dan <e operator mongo jika tanggal dalam format string di mongodb

  5. Cara mengonversi set replika MongoDB ke server yang berdiri sendiri