#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 ? Я хочу вызвать базу данных из другого файла.