node.js - 如何构建我只需要打开一次 mongodb 连接的快速应用程序?

标签 node.js mongodb express

注意:请在回答之前阅读本文的编辑部分,这可能会节省您的时间并回答我的一个问题。

我遇到的问题很简单,但我对这个整体还是很陌生,我在弄清楚如何在 Node/express 应用程序中正确实现 mongodb 数据库连接时遇到了问题。

我使用的是 express 3.x,我的应用程序布局基于 Express 作者提供的这个项目: https://github.com/expressjs/express/tree/d8caf209e38a214cb90b11ed59fd15b717b3f9bc/examples/blog (现已从 repo 中删除)

我对创建博客没有兴趣,但是应用程序的结构方式似乎相当不错。路线是分开的,一切都井井有条。

我的问题是我可能有 5-6 个不同的路由 js 文件,每个路由 js 文件可能有 1 到 15 个路由;这些 route 的 1 或 15 条可能想要访问数据库。

所以我的问题是每次我想查询数据库时执行 db.open(...) 似乎是一个非常糟糕的主意。我应该在这一点上提到我正在使用 native mongo-db 驱动程序(npm install mongodb)。

我还需要包含这样的文件: http://pastebin.com/VzFsPyax

...在所有这些路由文件和我的所有模型文件中。然后我还要处理几十个打开的连接。

有没有一种方法可以构建我的应用程序,使我只建立 1 个连接并在 session 期间保持打开状态(每次请求都创建一个新连接也会很糟糕)?

如果是这样,我该怎么做?如果您知道答案,请使用 tj 的博客应用程序(本文前面链接的应用程序)结构发布代码示例作为基本指南。基本上有一种方法可以让路由和模型在与 db 开放代码不同的文件中自由使用 db。

谢谢。

编辑

我在解决我的一个问题上取得了一些进展。如果您查看 tj 的博客示例,他会像这样在 app.js 中初始化他的路由:

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

在路由 js 文件中是这样开始的:

module.exports = function(app){

我今天早些时候偶然发现了一个项目,我看到有人在 modules.exports 调用 -> 函数(app,db)中传递了 2 个变量。然后想哇会这么容易吗,我是否也需要将我的路线调整为(app,db)?是的,好像是这样。

所以现在问题的第 1 部分已经解决。我不必在每个路由文件中都需要一个带有连接样板的 mongo.js 文件。同时它足够灵活,我可以决定选择哪些路由文件通过数据库引用。这是标准的,没有缺点吧?

问题的第 2 部分(不幸的是,重要的部分)仍然存在。

如何绕过必须围绕我所做的每个查询执行 db.open(...) 并且理想情况下每个 session 只建立一次连接?

最佳答案

其他解决方案是通过请求将数据库传递给路由器,如下所示:

app.js

var db = openDatabase();

var app = express();

app.all('*', function(request, response, next)
    {
    request.database = db;
    next();
    });

app.get('/api/user/:id', Users.getByID);

users.js

var Users =
    {
    getByID: function(request, response)
        {
        request.database.collection('users').findOne(...)
        response.send(user);
        }
    };

module.exports = Users;

关于node.js - 如何构建我只需要打开一次 mongodb 连接的快速应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9651066/

相关文章:

node.js - 如何在 Electron 应用程序中显示另存为对话框?

javascript - 如何更新 _ids 数组中的所有 Mongo 文档?

javascript - 显示 [object Object] 而不是对象属性

客户端 JavaScript 代码替换

javascript - Express 返回服务器的自动 HTML 错误页面,而不是我的 res.json 错误消息

node.js - 如何在 Mongoose 中找到基于 and 条件的模型的不同字段?

mysql - SequelizeJS 中的慢关联

mongodb - 如何在复杂的 Collection-Object 中附加新文档

mysql - 将 MySQL 数据库导入 MongoDB - 一对多关系 ID 更新

express - 无法安装 express 因为 npm install express 错误