Лучший способ поделиться параметром соединения с базой данных с mongoose / node.js - PullRequest
22 голосов
/ 13 марта 2012

Я использую Mongoose для управления базой данных Mongo.Мой файл подключения довольно прост:

var mongoose = require('mongoose')

mongoose.connection.on("open", function(){
  console.log("Connection opened to mongodb at %s", config.db.uri)
});
console.log("Connecting to %s", config.db.uri)
mongoose.connect(config.db.uri)

global.mongoose = mongoose

Тогда в моем app.js я просто

require('./database)

, и переменная "mongoose" доступна по всему миру.Я бы предпочел не использовать глобалы (по крайней мере, не напрямую).Есть ли лучший способ совместного использования переменной подключения к базе данных через узел (я использую express.js) с помощью шаблона синглтона или каким-либо другим методом?

Ответы [ 3 ]

29 голосов
/ 13 марта 2012

Я просто делаю следующее в моем файле app.js:

var mongoose = require('mongoose');
mongoose.connect('mongodb://address_to_host:port/db_name');
modelSchema = require('./models/yourmodelname').YourModelName;
mongoose.model('YourModelName', modelSchema);
// TODO: write the mongoose.model(...) command for any other models you have.

На этом этапе любой файл, которому требуется доступ к этой модели, может сделать:

var mongoose = require('mongoose');
YourModelName = mongoose.model('YourModelName');

И, наконец, вВ вашей модели вы можете записать файл в обычном режиме, а затем экспортировать его внизу:

module.exports.YourModelName = YourModelName;

Я не знаю, является ли это лучшим и самым удивительным решением (только что начал заниматься экспортом модулей около 2 днейназад) но это работает.Может быть, кто-то может прокомментировать, если это хороший способ сделать это.

6 голосов
/ 13 марта 2012

если вы следуете экспорту commonjs

exports.mongoose = mongoose

, скажем, имя вашего модуля - connection.js

, вам может потребоваться

   var mongoose = require('connection.js')

, вы можете использовать соединение mongoose

2 голосов
/ 25 июня 2012

Обычно я обертываю свои модели следующим образом

var MySchema = (function(){
//Other schema stuff 

//Public methods
GetIdentifier = function() {
return Id;
};

GetSchema = function() {
return UserSchema;
};

return this;
})();

if (typeof module !== 'undefined' && module.exports) {
exports.Schema  = MySchema;
}

И в своем основном классе я делаю это var schema = require('./schema.js').Schema; и вызываю conn.model(schema.GetIdentifier(), schema.GetSchema()) и, конечно, после вызова connect или createConnection.Это позволяет мне подключить схему к стандартному набору методов.Это обобщение хорошо, потому что вы можете сосредоточиться на своей схеме после того, как вы освоите соединение и обработку ошибок.Я также расширяю схему плагинами, и это позволяет мне делиться плагинами с другими схемами.

Я пытался выяснить, справился ли кто-то с этим лучше, но не смог найти хороший образец, и я довольно новичок в Монго.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...