Ant*_*lad 16 mongodb node.js express
注意:请在回答之前阅读本文的编辑部分,这可能会节省您的时间并回答我的一个问题.
我遇到的问题非常简单,但我对这个问题很陌生,而且我在解决如何在节点/快速应用程序中正确实现mongodb数据库连接时遇到了问题.
我正在使用express 3.x并且我的应用程序布局基于这个项目由express的作者提供:https: //github.com/visionmedia/express/tree/master/examples/blog
我没有兴趣创建一个博客,但应用程序结构的方式似乎相当不错.路线是分开的,一切都很好地组织.
我的问题是我可能有5-6个不同的路由js文件,每个路由js文件可能有1到15个路由之间的任何地方; 那些路由1或15可能想要访问数据库.
所以我的问题是,每次我想查询数据库时,做一个db.open(...)似乎是一个非常可怕的想法.我现在应该提一下我使用的是本机mongo-db驱动程序(npm install mongodb).
我还需要包含这样一个文件:http: //pastebin.com/VzFsPyax
...在所有这些路径文件和我的所有模型文件中.然后我还要处理几十个打开的连接.
有没有办法我可以这样的方式构建我的应用程序,我只进行1次连接,并在会话期间保持打开状态(有一个新的,每个请求也会很糟糕)?
如果是这样,我该怎么做?如果您知道答案,请使用tj的博客应用程序(本文前面链接的那个)结构作为基本指南发布代码示例.基本上有一种方法,路由和模型可以自由地使用数据库,而不是数据库开放代码.
谢谢.
编辑
我在解决我的一个问题上取得了一些进展.如果你看看tj的博客示例,他会在app.js中初始化他的路线,如下所示:
require('./routes/site')(app);
require('./routes/post')(app);
Run Code Online (Sandbox Code Playgroud)
在路径js文件中,它像这样开始:
module.exports = function(app){
Run Code Online (Sandbox Code Playgroud)
我偶然发现了今天早些时候的一个项目,我看到有人在modules.exports调用 - > function(app,db)中传递了2个变量.然后想到哇可能就这么简单,我还需要调整我的路线(app,db)吗?是的,似乎是这样.
所以现在问题的第1部分已经解决了.我不需要在每个路由文件中都需要带有连接样板的mongo.js文件.同时它足够灵活,我可以决定选择哪个路由文件传递db引用.这是标准的,没有任何缺点吗?
问题的第2部分(不幸的是重要的)仍然存在.
如何围绕我所做的每个查询绕过必须执行db.open(...),理想情况下每个会话只进行一次连接?
Fab*_*taz 16
其他解决方案是通过请求将数据库传递给路由器,如下所示:
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);
Run Code Online (Sandbox Code Playgroud)
users.js
var Users =
{
getByID: function(request, response)
{
request.database.collection('users').findOne(...)
response.send(user);
}
};
module.exports = Users;
Run Code Online (Sandbox Code Playgroud)
真的很傻。在文档中,似乎 db.open 需要包装使用它的任何内容,但实际上您可以在没有回调的情况下使用它。
因此,答案是在数据库连接模块、app.js 文件或您决定设置数据库服务器/连接的任何位置执行 db.open() 。
只要您在使用它的文件中传递对数据库的引用,您就可以访问准备查询的“打开”数据库连接。
| 归档时间: |
|
| 查看次数: |
9376 次 |
| 最近记录: |