我对Web开发很陌生。我正试图让一个node.js / express / mongo项目开始。我来自C / C ++背景,模块组织范例对我来说似乎有点奇怪。
目前,在我的server.js
中,我使用mongoose创建,连接和初始化我的mongoDB对象,然后传递此对象查询,在其上插入ect。似乎不是我应该在server.js
内做的事情。
通过创建一个单独的模块(例如数据库)从我的项目中松散地耦合Mongo是正确的方法,我在那里执行所有初始化,选项,ect,并通过这个新模块返回一个mongodb实例?
我以前从未进行过这种尺寸(或类型)的项目,只是不知道如何最好地组织一切...... 任何比我更有经验的人的建议都会受到赞赏
答案 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
对象。