MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Kiến trúc ứng dụng dựa trên Mongoose

Khi mới bắt đầu sử dụng Node.js, Express và Mongoose, tôi đã phải vật lộn với việc mở rộng mã của mình. P>

  • Tôi luôn kết nối với cơ sở dữ liệu, tôi không mở và đóng các kết nối khi cần
  • Tôi sử dụng index.js dưới dạng tệp gốc của một thư mục, giống như chúng ta làm với các ngôn ngữ khác
  • mô hình được lưu giữ trong tài liệu của riêng chúng và require() d vào models/index.js tệp.
  • các tuyến đường tương tự như các mô hình, mỗi cấp độ tuyến đường có một thư mục có index.js lần lượt nộp hồ sơ. Vì vậy, thật dễ dàng để sắp xếp một cái gì đó như http://example.com/api/documents/:id . Nó cũng có ý nghĩa hơn khi một người xem qua cấu trúc tệp.

Đây là cấu trúc của những gì tôi sử dụng:

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

Vì vậy, đối với mỗi mô hình mà bạn làm việc, bạn hãy tạo một model.js và thêm nó vào models/index.js bên trên. Như một ví dụ, tôi đã thêm một User mô hình nhưng đã nhận xét nó ra.

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

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

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

đề xuất sử dụng

  • mô hình:để tạo logic xử lý tài liệu, tức là tạo, cập nhật, xóa và tìm kiếm.
  • các tuyến:mã hóa tối thiểu, chỉ khi tôi cần phân tích cú pháp dữ liệu http, tạo các phiên bản của mô hình và sau đó tôi gửi các truy vấn đến mô hình có liên quan.
  • phương pháp:cho logic phức tạp hơn không liên quan trực tiếp đến các mô hình. Ví dụ, tôi có algorithms/ thư mục nơi tôi lưu trữ tất cả các thuật toán mà tôi sử dụng trong ứng dụng của mình.

Hy vọng điều này cung cấp rõ ràng hơn. Cấu trúc này mang lại hiệu quả kỳ diệu cho tôi vì tôi thấy nó rất dễ làm theo.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDb được cài đặt bởi Meteor như thế nào?

  2. Mongoose sắp xếp kết quả tổng hợp

  3. $ lookup trả về mảng trống

  4. java.lang.Incomp Tương thíchClassChangeError:Triển khai lớp Mongo

  5. Ứng dụng giống Twitter sử dụng MongoDB