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