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.
- 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.
-
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"
-
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);
-
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ộtinit
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;
- 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ẻ trongpackage.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. -
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àocommon
của bạn dự án và gọiinit
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);
-
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);