Я собираюсь ответить на ваш вопрос пополам.
Прямо сейчас, для моего тестового приложения, подключение к БД находится в главном файле узла
Это хорошо, хотя вы можете поместить его в отдельный файл более простое повторное использование. NodeJS - это продолжающийся процесс, поэтому теоретически вы можете обслуживать все ваши HTTP-ответы, используя то же соединение с базой данных. На практике вам нужно создать пул соединений, но драйвер Mongodb для NodeJS уже делает это автоматически.
Каждая страница должна подключаться к БД, найти какие-то данные, и отобразить его.
Когда вы отправляете запрос на драйвер MongoDB, он автоматически будет использовать соединение из своего пула внутренних подключений, если вы предоставили ему учетные данные, когда приложение запускалось.
Что я хочу/необходимость: безопасный способ (т.е. не хранить пароль в файлах пользователи могут получить доступ) для подключения к БД только тогда, когда это необходимо.
Я бы посоветовал сохранить конфигурацию вашего приложения (любые переменные, зависящие от среды, в которой работает приложение), в отдельном файле, который вы не фиксируете в своем VCS. Такой модуль, как node-config, может многое помочь.
Код, который вы будете в конечном итоге с помощью узла-конфигурации, это что-то вроде:
конфигурации/default.json:
{
"mongo": null
}
Это файл конфигурации по умолчанию, вы совершаете.
config/local.JSON:
{
"mongo": "mongo://user:[email protected]:port/db"
}
local.json следует игнорировать вашим VCS. Он содержит секретный соус.
connection.js:
var config = require('config');
var MongoClient = require('mongodb').MongoClient;
var cache;
module.exports = function(callback){
if(cache){
return callback(cache);
}
MongoClient.connect(config.get('mongo'), function(err, db){
if(err){
console.error(err.stack);
process.exit(1);
}
cache = db;
callback(db);
});
}
неполный пример того, как можно обрабатывать повторно использовать соединение с базой данных. Обратите внимание, как конфигурация получена с использованием config.get(*)
. Фактическая реализация должна обладать более надежной обработкой ошибок и предотвращать создание нескольких подключений. Использование Promises сделает все это намного проще.
index.js:
var connect = require('./connection');
connect(function(db){
db.find({whatever: true})
});
Теперь вы можете требовать файл базы данных в любом месте вы хотите, и использовать тот же соединение с базой данных, который обрабатывает пулы для вас, и вы не имеете ваши пароли трудно - закодированы где угодно.