注意:请在回答之前阅读这篇文章的编辑部分,它可能会节省您的时间并回答我的问题之一。
我遇到的问题非常简单,但我对整体来说还很陌生,并且在弄清楚如何在节点/express 应用程序中正确实现 mongodb 数据库连接时遇到问题。
我正在使用 Express 3.x,并且我的应用程序布局基于 Express 作者提供的这个项目:https://github.com/expressjs/express/tree/d8caf209e38a214cb90b11ed59fd15b717b3f9bc/examples/blog https://github.com/expressjs/express/tree/d8caf209e38a214cb90b11ed59fd15b717b3f9bc/examples/blog(现已从回购中删除)
我对创建博客没有兴趣,但是该应用程序的结构方式似乎相当不错。路线是分开的,一切都组织得很好。
我的问题是我可能有 5-6 个不同的路由 js 文件,每个路由 js 文件可能有 1 到 15 条路由;其中 1 或 15 条路线可能想要访问数据库。
所以我的问题是,每次我想查询数据库时都执行 db.open(...) 似乎是一个非常糟糕的主意。我应该提到,此时我正在使用本机 mongo-db 驱动程序(npm install mongodb)。
我还需要包含这样的文件:http://pastebin.com/VzFsPyax http://pastebin.com/VzFsPyax
...在所有这些路线文件和我的所有模型文件中。然后我还要处理数十个开放连接。
有没有一种方法可以让我只建立 1 个连接并在会话期间保持打开状态(每个请求都发出一个新的连接也很糟糕)?
如果是这样,我该怎么做?如果您知道答案,请使用 tj 的博客应用程序(本文前面链接的应用程序)结构作为基本指南发布代码示例。基本上有一种方法可以让路由和模型可以自由使用数据库,同时位于与数据库打开代码不同的文件中。
Thanks.
EDIT
我在解决我的一个问题上取得了一些进展。如果您查看 tj 的博客示例,他会在 app.js 中初始化其路由,如下所示:
require('./routes/site')(app);
require('./routes/post')(app);
在routes js文件中,它的开头是这样的:
module.exports = function(app){
今天早些时候我偶然发现了一个项目,我看到有人在 module.exports 调用 -> function(app, db) 中传递了 2 个变量。然后我想哇,有那么容易吗?我是否也需要将我的路线调整为(app,db)?是的,看来是这样。
现在问题的第 1 部分已经解决了。我不必在每个路由文件中都需要带有连接样板的 mongo.js 文件。同时它足够灵活,我可以决定选择哪些路由文件传递数据库引用。这是标准的,没有缺点吧?
但问题的第二部分(不幸的是重要的部分)仍然存在。
如何绕过我所做的每个查询都必须执行 db.open(...) ,并且理想情况下每个会话仅建立一次连接?