Secara pribadi saya membuat proyek "umum" terpisah dengan metode init untuk mendaftarkan semua model dengan mongodb, dan memanggil metode init di file app.js dari aplikasi apa pun yang memerlukan akses ke model.
- Buat proyek bersama - Buat proyek simpul baru, mengikuti proses standar.
-
package.json - Dalam proyek bersama, atur
package.json
Anda file yang berisi entri berikut:"main": "index.js"
-
Tambahkan model - Buat
models
baru folder dalam proyek bersama Anda, untuk menampung semua skema dan plugin luwak Anda. Tambahkan file userSchema Anda ke folder model dan beri namauser.js
.var mongoose = require('mongoose'); var userSchema = new mongoose.Schema({ email: String }); module.exports = mongoose.model('User', userSchema);
-
index.js - Kemudian di root proyek
index.js
file membuat objek bersama yang dapat digunakan oleh aplikasi Anda, memperlihatkan model daninit
metode. Ada banyak cara untuk membuat kode ini, tetapi inilah cara saya melakukannya: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;
- Referensikan
common
your Anda proyek - Bagaimanapun Anda ingin mereferensikan proyek bersama Anda, tambahkan referensi ke proyek bersama dipackage.json
file dalam aplikasi Anda dan beri namacommon
. Secara pribadi saya menggunakan GitHub untuk menyimpan proyek dan mereferensikan jalur repositori. Karena repositori saya bersifat pribadi, saya harus menggunakan kunci di jalur, yang tercakup di situs dukungan GitHub. -
Memulai model di aplikasi Anda - Dalam skrip awal untuk aplikasi Anda (misalkan
app.js
untuk contoh ini) tambahkan referensi kecommon
. Anda proyek dan panggilinit
metode untuk terhubung ke server mongodb dan mendaftarkan model.//at the top, near your other module dependencies var mongoose = require('mongoose') , common = require('common'); common.init(mongoose);
-
Gunakan model di mana saja di aplikasi Anda - Sekarang luwak memiliki kumpulan koneksi yang dibuat dan modelnya telah terdaftar, Anda dapat menggunakan model di salah satu kelas dalam aplikasi Anda. Misalnya, Anda memiliki halaman yang menampilkan informasi tentang
user
Anda bisa melakukannya seperti ini (kode yang belum diuji, tulis saja ini sebagai contoh):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}}); }); });
EDIT Maaf, saya tidak melihat baris tempat Anda mewarisi satu skema dari skema lainnya. Seperti yang dinyatakan oleh salah satu jawaban lain, luwak sudah menawarkan konsep plugin
. Dalam contoh Anda di atas, Anda akan melakukan ini:
Di modul umum Anda, di bawah '/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.
}
Di modul umum Anda, di bawah '/models/entrepreneur.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);