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

Архитектура на приложения, базирана на Mongoose

Когато за първи път навлязох в Node.js, Express и Mongoose, се борих с мащабирането на кода си. Целта на моя отговор е да помогна на някой, който работи върху нещо повече от обикновен блог, но да помогна с още по-голям мащабируем проект.

  • Винаги съм свързан с базата данни, не отварям и затварям връзки, когато е необходимо
  • Използвам index.js като основен файл на папка, точно както бихме направили на други езици
  • моделите се съхраняват в техните собствени документи и require() d в models/index.js файл.
  • маршрутите са подобни на моделите, всяко ниво на маршрута има папка, която има index.js файл на свой ред. Така че е лесно да подредите нещо като http://example.com/api/documents/:id . Освен това има по-голям смисъл, когато се премине през файловата структура.

Ето структурата на това, което използвам:

-- 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)

mongoose/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

Така че за всеки модел, върху който работите, създавате model.js документ и го добавете в models/index.js по-горе. Като пример добавих User модел, но го коментирах.

// 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;

routes/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
}

предложена употреба

  • модели:за създаване на логиката, която се занимава с документите, т.е. създаване, актуализиране, изтриване и търсене.
  • маршрути:минимално кодиране, само когато трябва да анализирам http данни, да създам екземпляри на модели и след това изпращам заявки към съответния модел.
  • методи:за по-сложната логика, която не включва пряко модели. Като пример имам algorithms/ папка, където съхранявам всички алгоритми, които използвам в приложението си.

Надяваме се, че това дава повече яснота. Тази структура върши чудеса за мен, тъй като намирам, че е лесна за следване.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Nodejs Mongo вмъкване в поддокумент - динамично име на поле

  2. MongoDB $filter

  3. Статистики за база данни и колекция MongoDB

  4. Как мога да използвам Python за трансформиране на bsondump на MongoDB в JSON?

  5. Каква е разликата между запазване и вмъкване в Mongo DB?