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

Các lược đồ trong mô-đun bên ngoài không hoạt động trong Node.js

Cá nhân tôi đã tạo dự án "chung" riêng với phương thức init để đăng ký tất cả các mô hình với mongodb và gọi phương thức init trong tệp app.js của bất kỳ ứng dụng nào cần quyền truy cập vào các mô hình.

  1. Tạo một dự án được chia sẻ - Tạo một dự án nút mới theo quy trình chuẩn.
  2. package.json - Trong dự án được chia sẻ, hãy đặt package.json của bạn tệp để chứa mục nhập sau:

    "main": "index.js"
    
  3. Thêm mô hình - Tạo một models mới thư mục trong dự án được chia sẻ của bạn, để chứa tất cả các lược đồ và plugin mongoose của bạn. Thêm tệp userSchema của bạn vào thư mục mô hình và đặt tên là user.js .

    var mongoose = require('mongoose');
    
    var userSchema = new mongoose.Schema({
        email: String
    });
    
    module.exports = mongoose.model('User', userSchema);
    
  4. index.js - Sau đó, trong thư mục gốc của dự án index.js tệp tạo một đối tượng được chia sẻ có thể được sử dụng bởi các ứng dụng của bạn, hiển thị các mô hình và một init phương pháp. Có nhiều cách để viết mã này, nhưng đây là cách tôi đang thực hiện:

    function Common() {
        //empty array to hold mongoose Schemas
        this.models = {};
    }
    
    Common.prototype.init = function(mongoose) {
        mongoose.connect('your mongodb connection string goes here');
        require('./models/user');
        //add more model references here
    
        //This is just to make referencing the models easier within your apps, so you don't have to use strings. The model name you use here must match the name you used in the schema file
        this.models = {
            user: mongoose.model('User')
        }
    }
    
    var common = new Common();
    
    module.exports = common;
    
  5. Tham chiếu common của bạn dự án - Tuy nhiên, bạn muốn tham chiếu đến dự án được chia sẻ của mình, hãy thêm tham chiếu đến dự án được chia sẻ trong package.json tệp trong ứng dụng của bạn và đặt tên cho nó là common . Cá nhân tôi đã sử dụng GitHub để lưu trữ dự án và tham chiếu đường dẫn kho lưu trữ. Vì kho lưu trữ của tôi là riêng tư nên tôi phải sử dụng một khóa trong đường dẫn, khóa này có trên trang web hỗ trợ GitHub.
  6. Kết hợp các mô hình trong ứng dụng của bạn - Trong tập lệnh bắt đầu cho ứng dụng của bạn (giả sử đó là app.js cho ví dụ này) thêm tham chiếu vào common của bạn dự án và gọi init phương pháp kết nối với máy chủ mongodb và đăng ký các mô hình.

    //at the top, near your other module dependencies
    var mongoose = require('mongoose')
      , common = require('common');
    
    common.init(mongoose);
    
  7. Sử dụng mô hình ở bất kỳ đâu trong ứng dụng của bạn - Bây giờ mongoose đã thiết lập nhóm kết nối và các mô hình đã được đăng ký, bạn có thể sử dụng các mô hình là bất kỳ lớp nào trong ứng dụng của mình. Ví dụ:giả sử bạn có một trang hiển thị thông tin về user bạn có thể làm như thế này (mã chưa được kiểm tra, chỉ viết cái này để làm ví dụ):

    var common = require('common');
    
    app.get('/user-profile/:id', function(req, res) {
        common.models.user.findById(req.params.id, function(err, user) {
             if (err)
                 console.log(err.message); //do something else to handle the error
             else
                 res.render('user-profile', {model: {user: user}});
        });
    });
    

CHỈNH SỬA Xin lỗi, tôi không nhìn thấy dòng nơi bạn đang kế thừa một giản đồ này từ một giản đồ khác. Như một trong những câu trả lời khác đã nêu, mongoose đã đưa ra khái niệm về một plugin . Trong ví dụ của bạn ở trên, bạn sẽ làm điều này:

Trong mô-đun chung của bạn, trong '/models/base-profile-plugin.js'

module.exports = exports = function baseProfilePlugin(schema, options){

    //These paths will be added to any schema that uses this plugin
    schema.add({
        _user: {type: Schema.Types.ObjectId, ref: 'User', required: true},
        name: {type: String, required: true},
        bio: {type: String, required: true},
        pictureLink: String
    });

    //you can also add static or instance methods or shared getter/setter handling logic here. See the plugin documentation on the mongoose website.
}

Trong mô-đun chung của bạn, trong '/models/entosystemur.js

var mongoose    = require('mongoose')
  , basePlugin  = require('./base-profile-plugin.js');

var entrepreneurSchema   = new mongoose.Schema({
    mentors: {type: Schema.Types.ObjectId, ref: 'Mentor'}
});

entrepreneurSchema.plugin(basePlugin);

module.exports = mongoose.model('Entrepreneur', entrepreneurSchema);


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm cách nào để truy cập các đối tượng json được nhúng trong Pandas DataFrame?

  2. Morphia MongoDB kiểm tra trường rỗng và không tồn tại

  3. Cách tạo lược đồ Mongoose lưu đầu vào dưới dạng html trong mongodb

  4. Việc di chuyển tài liệu giữa các bộ sưu tập có phải là một cách tốt để thể hiện các thay đổi trạng thái trong MongoDB không?

  5. Truy vấn một mảng mảng trong MongoDB