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