Подтвердить что ты не робот

Лучший способ обмена параметром подключения к базе данных с 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)

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

4b9b3361

Ответ 1

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

Ответ 2

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

exports.mongoose = mongoose

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

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

   var mongoose = require('connection.js')

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

Ответ 3

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

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

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

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