9

プログラム内のすべてのモジュールから定義したモデルを使用できるように、mongooseデータベースモジュールをエクスポートする必要があります。

たとえば、私のdatabase.jsモジュールは次のようになります。

var mongoose = require('mongoose'),
    db = mongoose.createConnection('mongodb://localhost/newdb'),
    Schema = mongoose.Schema;

db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback () {
    console.log("Connected to database newdb");

    var dynamicUserItemSchema = new mongoose.Schema({
      userID: Number,
      rank:  Number,
    });

    var staticUserItemSchema = new mongoose.Schema({
        _id: Schema.Types.Mixed,
        type: Schema.Types.Mixed,
    });

    var DynamicUserItem = db.model('DynamicUserItem', dynamicUserItemSchema);
    var StaticUserItem = db.model('StaticUserItem', staticUserItemSchema);

});

var db = require('../my_modules/database');プログラムを他のモジュールに追加できるようにしたいので、次のようなモデルを使用できるようになります。

db.DynamicUserItem.find();またitem = new db.DynamicUserItem({});

「エクスポート」または「モジュールエクスポート」を使用してそれを行うことは可能ですか?ありがとう。

4

4 に答える 4

29

私は通常、errorandopenイベントを使用せず、mongoosejsの例に従ってデータベースへの接続を作成します。この例を使用すると、次のことができます。

db.js

var mongoose = require('mongoose');
var db = mongoose.createConnection('localhost', 'test');

var schema = mongoose.Schema({ name: 'string' });
var Cat = db.model('Cat', schema);

module.exports = Cat; // this is what you want

そしてあなたのapp.jsであなたは次のようなことをすることができます

var Cat = require('db');

var peter = new Cat();

お役に立てば幸いです。

于 2012-12-02T11:47:14.240 に答える
7

エクスポートを使用して、他の場所で必要になる可能性のあるモジュールを定義できます。

./models/list.js

var ListSchema = new Schema({
    name                : { type: String, required: true, trim: true }
    , description   : { type: String, trim: true }
});

module.exports = db.model('List', ListSchema);

./routes/list.js

var list = module.exports = {};

var List = require('../models/list');

list.get = function(req, res){
        List.find({ user: user._id }).exec(function(err, lists){
            res.render('lists', {
                lists: lists,
            });
        });
    });
};

./app.js

app.get('lists', routes.lists.get);
于 2012-12-02T17:51:42.950 に答える
2

Expressを使用している場合は、モデルをapp.settingsに配置します。構成時に次のようなことを行うことができます。

app.configure(function() {
  app.set('db', {
      'main'     : db
    , 'users'    : db.model('User')
  })
})

その後、のようなモデルを使用できるようになります。または、他の方法で必要なファイルの変数req.app.settings.db.usersを取得する方法を作成できます。db

この回答は完全な例ではありませんが、比較的使いやすい方法でExpressとMongooseをセットアップする私のスタータープロジェクトを見てください:https ://github.com/mathrawka/node-express-starter

于 2012-12-02T11:15:57.797 に答える
2

受け入れられた回答への追加として、複数のモジュールをエクスポートする場合は、次のことができます。

db.jsの場合:

var my_schemas = {'Cat' : Cat, 'Dog': Dog};
module.exports = my_schemas;

次に、app.jsで:

var schemas = require('db');
var Cat = schemas.Cat;
var Dog = schemas.Dog;
Cat.find({}).exec({...});
于 2016-06-01T20:48:59.153 に答える