Как я могу структурировать свое экспресс-приложение, в котором мне нужно только один раз открыть соединение mongodb?

Примечание: пожалуйста, прочитайте отредактированную часть этого поста, прежде чем отвечать, это может сэкономить ваше время и ответить на один из моих вопросов.

Проблема, с которой я столкнулся, довольно проста, но в целом я новичок в этом, и у меня возникают проблемы с выяснением того, как правильно реализовать соединение с базой данных 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.

Итак, моя проблема в том, что мне кажется действительно ужасной идеей делать db.open(...) каждый раз, когда я хочу запросить базу данных. Здесь я должен упомянуть, что использую родной драйвер mongo-db (npm install mongodb).

Мне также нужно было бы включить такой файл: http://pastebin.com/VzFsPyax

...во всех этих файлах маршрутов и всех моих файлах моделей.Тогда я также имею дело с десятками и десятками открытых соединений.

Есть ли способ структурировать свое приложение таким образом, чтобы я выполнял только одно соединение, и оно оставалось бы открытым в течение всего сеанса (тоже было бы плохо, если бы новое соединение выполнялось для каждого запроса)?

Если да, то как мне это сделать? Если вы знаете ответ, пожалуйста, разместите пример кода, используя структуру приложения блога tj (тот, который был указан ранее в этом посте) в качестве базового руководства. В основном есть способ, при котором маршруты и модели могут свободно использовать базу данных, находясь в отдельных файлах, чем открытый код базы данных.

Спасибо.

РЕДАКТИРОВАТЬ

Я немного продвинулся в решении одной из своих проблем. Если вы посмотрите на пример блога tj, он инициализирует свои маршруты в app.js следующим образом:

require('./routes/site')(app);
require('./routes/post')(app);

А в файле маршрутов js он начинается так:

module.exports = function(app){

Сегодня я наткнулся на проект, где я видел, как кто-то передает 2 переменные. в вызове modules.exports -> функция (приложение, БД). Затем подумал, что это может быть так просто, мне нужно просто настроить мои маршруты так, чтобы они были (приложение, БД)? Да, кажется.

Итак, первая часть проблемы решена. Мне не нужно требовать файл mongo.js с шаблоном подключения в каждом файле маршрута. В то же время он достаточно гибкий, и я могу выбирать, какие файлы маршрутов передают ссылку на БД. Это стандартно и не имеет недостатков, верно?

Часть 2 проблемы (к сожалению, важная) все еще существует.

Как я могу избежать необходимости выполнять db.open(...) вокруг каждого запроса, который я делаю, и в идеале устанавливать соединение только один раз за сеанс?

16
задан Kaspar Lee 21 August 2019 в 15:42
поделиться