MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Skema dalam modul eksternal tidak berfungsi di Node.js

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.

  1. Buat proyek bersama - Buat proyek simpul baru, mengikuti proses standar.
  2. package.json - Dalam proyek bersama, atur package.json Anda file yang berisi entri berikut:

    "main": "index.js"
    
  3. 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 nama user.js .

    var mongoose = require('mongoose');
    
    var userSchema = new mongoose.Schema({
        email: String
    });
    
    module.exports = mongoose.model('User', userSchema);
    
  4. index.js - Kemudian di root proyek index.js file membuat objek bersama yang dapat digunakan oleh aplikasi Anda, memperlihatkan model dan init 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;
    
  5. Referensikan common your Anda proyek - Bagaimanapun Anda ingin mereferensikan proyek bersama Anda, tambahkan referensi ke proyek bersama di package.json file dalam aplikasi Anda dan beri nama common . 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.
  6. Memulai model di aplikasi Anda - Dalam skrip awal untuk aplikasi Anda (misalkan app.js untuk contoh ini) tambahkan referensi ke common . Anda proyek dan panggil init 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);
    
  7. 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);


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Koleksi yang dibatasi MongoDB dan indeks yang meningkat secara monotik

  2. Cara bergabung dan mengurutkan beberapa koleksi dalam satu saluran di Mongo

  3. MongoDB:pengecualian di initAndListen:20 Mencoba membuat file kunci pada direktori read-only:/data/db, mengakhiri

  4. Mengapa dan kapan diperlukan untuk membangun kembali indeks di MongoDB?

  5. luwak 'findById' mengembalikan nol dengan id yang valid