Поиск наилучшей практики использования одного соединения mongodb в нескольких файлах javascript

#javascript #node.js #mongodb #mongoose #database

#javascript #node.js #mongodb #мангуст #База данных

Вопрос:

На данный момент я разрабатываю node.js ОТДОХНИТЕ от веб-сервиса с помощью express. Я использовал MongoDB Mongoose для создания базы данных. Теперь у меня проблема в том, что я могу использовать соединение с БД только в том файле, в котором я установил соединение. Я нашел решение для использования соединения также в других файлах с помощью «module.exports» переменной _db. Но я не знаю, является ли это наилучшей практикой. Вот мой код:

databaseManager.js

 // Establish a connection to the database.
mongoose.Promise = global.Promise
mongoose.connect('mongodb://' cfg.db.ip ':' cfg.db.port '/' cfg.db.name)
var _db = mongoose.connection
_db.on('error', console.error.bind(console, 'DB connection error'))
_db.once('open', function() 
{
    console.log("DatabaseM: Connected to the database")
})
[...]
module.exports =
{
    db     :   _db,
}
  

otherFile.js

 var database = require('./databaseManagement')
[...]
database.db.collection('users').findOne({ name: "ashton"}, function(err, user)
{
   if (err) return callback(consts.ERROR_DB, null)
   if (!user) return callback(consts.WARN_DB_NO_CLIENT)

   callback(null, user)
})
  

Это отлично работает. Но может быть риск, который я не вижу?
Большое спасибо 🙂

Комментарии:

1. Вам вообще не нужно экспортировать соединение mongoose. Вы должны работать только с моделями, которые имеют доступ к соединению через mongoose внутренне, вам не нужно об этом заботиться. Просто создайте модель var Users = mongoose.model('user', UserSchema); и используйте ее следующим образом Users.find(....);

2. Это похоже на волшебство. Приятно 🙂

Ответ №1:

В вашем app.js файл :

 var url="mongdb:\localhost:27017dbname";
mongoose.connect(url); //it open default connection for mongodb and is handled by mongoose
  

Теперь выполняйте все свои задачи, какие захотите :

mongoose.connection.on(‘connected’, function () { console.log(‘Соединение Mongoose по умолчанию открыто для ‘ dbURI); });

Перенесите всю свою модель базы данных в app.js файл нравится как таковой:

 var model1 = require('./models/model1');
  

model1.js

 var mongoose = require('mongoose');
var data = new mongoose.Schema({
    name:{type:String, required:true}
});
module.exports = mongoose.model('collectionName', data);
  

Теперь, когда все ваши задачи завершены. Просто закройте соединение по умолчанию следующим образом :

 mongoose.connection.on('disconnected', function () { 
    console.log('Mongoose default connection disconnected'); 
});
  

Если в соединении возникает какая-либо ошибка, обработайте ее следующим образом :

 mongoose.connection.on('error',function (err) { 
    console.log('Mongoose default connection error: '   err);
});
  

Если служба узла завершает работу, закройте соединение usig этот код

 process.on('SIGINT', function() { 
    mongoose.connection.close(function () { 
        console.log('Mongoose default connection disconnected through app termination'); 
        process.exit(0); 
    });
});
  

Комментарии:

1. Спасибо за ваш быстрый ответ. Это означает, что я должен открывать соединение и закрывать его снова для каждого вызова базы данных в каждом файле?

2. Почему я должен импортировать все свои модели в app.js ? Я хочу вызвать базу данных из другого файла.