用nodejs组织文件夹结构和数据库查询,使用MVC模式expressionmongoose

我是nodejs以及mvc模式的新手。 我试图创build一个应用程序,利用快递,mongoose,ejs,护照。 我不确定在哪里放置我的数据库查询。 目前我已经开始将它们添加到controllers / routes.js文件中。 以下是我迄今为止创build的近似文件夹结构:

|-- config -- database.js // Exports just the db url -- passport.js // Exports Passport local auth strategies (includes db connections) |-- controllers -- routes.js // Routes |-- models -- user.js // Exports mongoose user schema |-- public |-- views -- home.ejs // Home ejs page -- signup.ejs // Sign up page -- user.ejs // User profile page app.js // Express configure and server start etc... 

我遵循护照教程,但在config / passport.js文件中存在唯一的db连接。 目前,我已经在routes.js文件中放置了一个连接,但是从我已经阅读的文件中,应该放在models文件夹中。 这是我在我的routes.js文件中的代码:

 //controllers/routes.js //USER PROFILE ROUTE app.get('/:user', function(req, res) { var userRoute = req.params.user; checkUserRoute(userRoute, res) }); function checkUserRoute(userRoute, res){ var User = require('../models/user'); User.findOne({ 'local.email' : userRoute }, function(err, user) { if (err){ return done(err); } if (user) { res.render('user.ejs', { title: userRoute, message: '' }); } else { res.send(404); } }); } 

我(初学者)对MVC的理解是,它将在模型文件夹中,但是为什么在我跟随的Passport教程中是在configuration文件夹中的数据库连接?

这是我用于我的应用程序的护照authentication部分的教程的文件夹结构:

http://scotch.io/tutorials/javascript/easy-node-authentication-setup-and-local#application-structure

即使默认的快速应用程序安装也令人困惑。 默认的快速应用程序有一个名为路由的文件夹,但随后它将app.get代码放置在app.js文件中,该文件位于根文件夹中,而不在path(controllers)文件夹中。

这是正确的或错误的数据库连接放在我的controllers / routes.js文件? 如果不应该把它放在哪里,我该如何调用访问mongo数据库的函数?

mongoose用户架构代码在正确的地方?

config / passport.js文件是否应该包含mongoose数据库连接?

1. config / passport.js文件是否应该包含mongoose数据库连接? 你可以把你的db.js数据库连接放到一个名为db.js的单独文件中,然后import或在passport.js require这个文件。 所以你的configuration文件夹可能看起来像这样

/config /db.js /passport.js

2.mongoose用户架构代码是否在正确的位置? 是的,但是你应该大写模型文件的第一个字母,以遵循惯例User.js

3.这是正确的或错误的数据库连接放在我的controllers / routes.js文件? 如果不应该把它放在哪里,我该如何调用访问mongo数据库的函数? 你没有把你的数据库连接放在routes.js文件中。 你的数据库的连接应该在你的configuration文件夹config/db.js 。 然后你会导出文件module.exports = db; 并要求它var db = require('/config/db.js'); 在你的controllers/routes.js文件中。 现在你将有权访问你的数据库连接。 您现在可以在您的控制器文件中运行Mongo查询和方法,这是您的应用逻辑应该去的地方。

您的模型只与您的控制器,而不是视图。 同样,您的视图只能对您的控制器说话。 以这种方式保持您的代码组织将使您的应用程序变得更加复杂时,您的生活更容易。

我会添加另一个“服务”文件夹,并在那里添加一些数据库访问服务。 你仍然可以把所有的数据库configuration放在你的configuration文件中,让服务从那里取得。

你可以做的另一件好事是在一个单独的模块中定义护照mongo-strategy,这样它也可以被replace。

如果你想用node,express和mongo快速启动并运行,请看sails.js 。 这是当今最stream行的node.js MVC框架,它将帮助您更轻松地启动这种types的项目。