如何正确分离MongoDB

时间:2013-07-22 16:23:45

标签: node.js mongodb express

我对Web开发很陌生。我正试图让一个node.js / express / mongo项目开始。我来自C / C ++背景,模块组织范例对我来说似乎有点奇怪。

目前,在我的server.js中,我使用mongoose创建,连接和初始化我的mongoDB对象,然后传递此对象查询,在其上插入ect。似乎不是我应该在server.js内做的事情。

通过创建一个单独的模块(例如数据库)从我的项目中松散地耦合Mongo是正确的方法,我在那里执行所有初始化,选项,ect,并通过这个新模块返回一个mongodb实例?

我以前从未进行过这种尺寸(或类型)的项目,只是不知道如何最好地组织一切...... 任何比我更有经验的人的建议都会受到赞赏

1 个答案:

答案 0 :(得分:2)

有很多方法可以做到这一点。这是一些想法。

是的,您需要设置某种路由/处理程序,以便不同的模块能够调用不同的服务和/或解耦。

下面是一个相当标准的node.js / express结构:

├── server.js
├── config
│   ├── development
│   ├── production
│   └── staging
├── handlers
│   ├── customers.js
│   └── stores.js
├── node_modules
│   ├── assert
│   ├── ejs
│   ├── express
│   ├── forever
│   ├── mongodb
│   └── mongoskin
├── package.json
├── README.md

然后在server.js中,您可以像这样导入处理程序:

// import route handlers
var customers = require('./handlers/customers'),
    stores = require('./handlers/stores');

然后在处理程序中,您将能够声明函数:

exports.addCustomer = function(req, res) {
    // ....
};

在server.js中可用于路由:

app.post('/customers/add/:id, metrics.addCustomer);

那么你就有了一个基本的框架。只是在处理程序文件中定义exports.XXX函数之外的数据库连接就可以了,因为这些函数可以访问server.js中的任何内容,但不会污染您的命名空间。

var url = config.user +":"
        + config.pass +"@"
        + config.host +"/"
        + config.database;

var mongo = require('mongoskin').db(url);

您可以从JSON文件加载config对象。

希望有所帮助。