Примечание. Пожалуйста, прочитайте отредактированную часть этого поста, прежде чем ответить, это может сэкономить ваше время и ответить на один из моих вопросов.
Проблема, с которой я столкнулся, довольно проста, но в целом я новичок в этом, и у меня возникают проблемы с выяснением того, как правильно реализовать соединение с базой данных mongodb в приложении node/express.
Я использую Express 3.x и основываю макет моего приложения на этом проекте, предоставленном автором Express: https://github.com/expressjs/express/tree/d8caf209e38a214cb90b11ed59fd15b717b3f9bc/examples/blog (теперь удалено из репо)
Я не заинтересован в создании блога, однако структура приложения выглядит довольно неплохо. Маршруты разделены, и все организовано хорошо.
Моя проблема в том, что у меня может быть 5-6 различных файлов js маршрута, и каждый файл js маршрута может иметь где-нибудь между 1 и 15 маршрутами; из этих маршрутов 1 или 15 может потребоваться доступ к БД.
Так что моя проблема в том, что кажется ужасной идеей делать db.open(...) каждый раз, когда я хочу запросить db. На данный момент я должен упомянуть, что я использую встроенный драйвер mongo-db (npm install mongodb).
Я также должен был бы включить файл как это: http://pastebin.com/VzFsPyax
... во всех этих файлах маршрута и во всех моих файлах модели. Тогда я также имею дело с десятками открытых десятков соединений.
Есть ли способ, которым я могу структурировать свое приложение таким образом, чтобы я устанавливал только 1 соединение, и оно оставалось открытым на время сеанса (создание нового запроса для каждого запроса также было бы плохо)?
Если так, как я могу это сделать? Если вы знаете ответ, пожалуйста, опубликуйте пример кода, используя структуру блога tj (см. ссылку в этом посте) в качестве базового руководства. По сути, есть способ, при котором маршруты и модели могут свободно использовать базу данных, находясь в отдельных файлах, чем открытый код базы данных.
Благодаря.
EDIT
Я добился определенного прогресса в решении одной из моих проблем. Если вы посмотрите на пример блога tj, он инициализирует свои маршруты в app.js следующим образом:
require('./routes/site')(app);
require('./routes/post')(app);
И в файле маршрутов JS это начинается так:
module.exports = function(app){
Я наткнулся на проект ранее сегодня, где я видел, как кто-то передавал 2 переменные в функции modules.exports → (app, db). Тогда подумал, может ли это быть так просто, мне нужно просто настроить маршруты, чтобы они были (app, db) тоже? Да, похоже.
Итак, теперь часть 1 проблемы решена. Мне не нужно требовать файл mongo.js с образцом подключения в каждом файле маршрута. В то же время он достаточно гибок, и я могу решить, какие файлы маршрутов передавать по ссылке в БД. Это стандартно и не имеет недостатков, верно?
Часть 2 проблемы (важная, к сожалению) все еще существует.
Как я могу обойтись без необходимости делать db.open(...) для каждого моего запроса и в идеале устанавливать соединение только один раз за сеанс?