4

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

目前,在我server.js的 mongoose 中,我使用 mongoose 创建、连接和初始化我的 mongoDB 对象,然后传递这个对象查询,在其上插入等。看起来不像是我应该在里面做的事情server.js

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

我以前从未从事过这种规模(或类型)的项目,只是不知道如何最好地组织所有事情。如果那些比我更有经验的人提供任何建议,我将不胜感激

4

1 回答 1

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);

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

希望有帮助。

于 2013-07-22T16:34:42.160 回答