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

Arsitektur aplikasi berbasis luwak

Ketika saya pertama kali masuk ke Node.js, Express, dan Mongoose, saya kesulitan menskalakan kode saya. Maksud dari jawaban saya adalah untuk membantu seseorang yang mengerjakan lebih dari sekadar blog sederhana, tetapi juga untuk membantu proyek skalabel yang lebih besar.

  • Saya selalu terhubung ke database, saya tidak membuka dan menutup koneksi saat dibutuhkan
  • Saya menggunakan index.js sebagai file root folder, seperti yang akan kita lakukan dalam bahasa lain
  • model disimpan dalam dokumennya sendiri, dan require() d ke dalam models/index.js berkas.
  • rute mirip dengan model, setiap tingkat rute memiliki folder, yang memiliki index.js berkas secara bergantian. Jadi mudah untuk mengatur sesuatu seperti http://example.com/api/documents/:id . Ini juga lebih masuk akal ketika seseorang menelusuri struktur file.

Berikut struktur yang saya gunakan:

-- app.js
-- models/
---- index.js
---- blog.js
-- mongoose/
---- index.js
-- routes/
---- index.js
---- blog/index.js
-- public/
-- views/
---- index.{your layout engine} => I use Jade.lang
-- methods/
---- index.js => use if you'd rather write all your functions here
---- blog.js => can store more complex logic here

app.js

var db = require('./mongoose'),
  express = require('express');
// note that I'm leaving out the other things like 'http' or 'path'
var app = express();

// get the routes
require('./routes')(app);
// I just require routes, without naming it as a var, & that I pass (app)

luwak/index.js

// Mongoose connect is called once by the app.js & connection established
// No need to include it elsewhere
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/blog');

// I have just connected, and I'm not exporting anything from here

models/index.js

// Logic here is to keep a good reference of what's used

// models
Blog = require('./blog');
// User = require('./user');

// exports
exports.blogModel = Blog.blogModel;
// exports.userModel = User.userModel;

models/blog.js

Jadi untuk setiap model yang Anda kerjakan, buat model.js dokumen, dan tambahkan di models/index.js di atas. Sebagai contoh saya telah menambahkan User model tetapi mengomentarinya.

// set up mongoose
var mongoose = require('mongoose');
var Schema = mongoose.Schema,
ObjectId = Schema.ObjectId;

var BlogSchema = Schema({
  header: {type: String },
  author: {type: String },
  text: {type: String },
  _id: { type: ObjectId } // not necessary, showing use of ObjectId
});

Blog = mongoose.model('Blog', BlogSchema);
// the above is necessary as you might have embedded schemas which you don't export

exports.blogModel = Blog;

rute/index.js

module.exports = function(app) {
  app.get('/', function(req, res) {
    // do stuff
  });
  require('./blog')(app);
  // other routes entered here as require(route)(app);
  // we basically pass 'app' around to each route
}

routes/blog/index.js

module.exports = function(app) {
  app.get('/blog', function(req, res) {
    // do stuff
  });
  require('./nested')(app);
  // this is for things like http://example.com/blog/nested
  // you would follow the same logic as in 'routes/index.js' at a nested level
}

penggunaan yang disarankan

  • models:untuk membuat logika yang berhubungan dengan dokumen, yaitu membuat, memperbarui, menghapus, dan mencari.
  • rute:pengkodean minimal, hanya saat saya perlu mengurai data http, membuat instance model, lalu saya mengirim kueri ke model yang relevan.
  • metode:untuk logika yang lebih kompleks yang tidak secara langsung melibatkan model. Sebagai contoh, saya memiliki algorithms/ folder tempat saya menyimpan semua algoritme yang saya gunakan di aplikasi saya.

Semoga ini memberikan lebih banyak kejelasan. Struktur ini bekerja dengan sangat baik bagi saya karena menurut saya mudah untuk diikuti.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mencocokkan bidang array yang berisi kombinasi apa pun dari array yang disediakan di MongoDB

  2. Bagaimana cara mengakses MongoDB Meteor dari klien lain, saat Meteor sedang berjalan?

  3. Layanan Mongodb tidak dapat dimulai

  4. Mongodb:Gagal terhubung ke 127.0.0.1:27017, alasan:errno:10061

  5. 5 Cara Mendapatkan Jam dari Tanggal di MongoDB