2015-12-27 2 views
0

Я использую node.js и mongoDB. Прямо сейчас, для моего тестового приложения, соединение с db находится в файле основного узла, но я думаю, что это неправильная практика. Что я хочу/нужно: безопасный способ (т. Е. Не сохранять пароль на файлы, к которым пользователи могут получить доступ), чтобы подключиться к db только тогда, когда это необходимо.Каков правильный способ управления подключениями к mongoDB, используя узел?

Например: Я хочу несколько страниц администрирования (пользователей, групп и т. Д.). Каждая страница должна подключаться к db, находить некоторые данные и отображать их. Он также имеет форму для добавления документа в базу данных и опцию удаления.

Я думал, может быть, создать какую-то функцию соединения - отправьте ее, что вы хотите сделать (добавить, обновить, найти, удалить), где (имя коллекции) и все, что ему нужно. Но я не могу просто включить эту функцию, потому что тогда она откроет пароль для db. Так что я могу сделать?

Спасибо!

ответ

2

Я собираюсь ответить на ваш вопрос пополам.


Прямо сейчас, для моего тестового приложения, подключение к БД находится в главном файле узла

Это хорошо, хотя вы можете поместить его в отдельный файл более простое повторное использование. 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}) 
}); 

Теперь вы можете требовать файл базы данных в любом месте вы хотите, и использовать тот же соединение с базой данных, который обрабатывает пулы для вас, и вы не имеете ваши пароли трудно - закодированы где угодно.

Смежные вопросы