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

Я использую 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)

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

3 ответа

Решение

Я просто делаю следующее в моем файле 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 дней назад), но оно работает. Может быть, кто-то может прокомментировать, если это хороший способ сделать это.

Если вы будете следовать экспорту Commonjs

exports.mongoose = mongoose

скажем, ваш модуль называется connection.js

вы можете потребовать

   var mongoose = require('connection.js')

Вы можете использовать подключение мангуста

Я обычно оборачиваю свои модели так

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. Это позволяет мне подключить схему к стандартному набору методов. Это обобщение хорошо, потому что вы можете сосредоточиться на своей схеме после того, как вы освоите соединение и обработку ошибок. Я также расширяю схему плагинами, и это позволяет мне делиться плагинами с другими схемами.

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

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

Другие вопросы по тегам