【问题标题】:Organising folder structure and database queries with nodejs, express, mongoose using an MVC pattern使用 MVC 模式使用 nodejs、express、mongoose 组织文件夹结构和数据库查询
【发布时间】:2014-05-07 06:38:45
【问题描述】:

我是 nodejs 以及 mvc 模式的新手。我正在尝试创建一个使用 express、mongoose、ejs、passport 的应用程序。我不确定在哪里放置我的数据库查询。目前我已经开始将它们添加到 controllers/routes.js 文件中。这是我目前创建的大致文件夹结构:

|-- 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 文件中存在唯一的数据库连接。目前我已经在 routes.js 文件中放置了一个连接,但是从我所阅读的内容来看,这些应该放在模型文件夹中。这是我在 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 遵循的教程中是 config 文件夹中的数据库连接?

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

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

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

在我的 controllers/routes.js 文件中放置数据库连接是对还是错?如果写错了应该放在哪里,如何调用访问mongo数据库的函数?

mongoose 用户架构代码是否在正确位置?

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

【问题讨论】:

    标签: node.js model-view-controller express mongoose passport.js


    【解决方案1】:

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

    /config /db.js /passport.js

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

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

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

    【讨论】:

    【解决方案2】:

    如果您想使用 node、express 和 mongo 更快地启动和运行,请查看 sails.js。它是当今最流行的 node.js MVC 框架,将帮助您更轻松地启动此类项目。

    【讨论】:

      【解决方案3】:

      我会添加另一个“服务”文件夹并在其中添加某种 db-accessor 服务。 您仍然可以将所有数据库配置放在配置文件中,并让服务从那里获取。

      您可以做的另一件好事是在单独的模块中定义护照 mongo-strategy 这样它也可以更换。

      【讨论】:

        猜你喜欢
        • 2012-02-23
        • 2021-09-07
        • 1970-01-01
        • 2018-11-28
        • 2015-07-22
        • 2020-05-16
        • 2013-09-24
        • 1970-01-01
        • 2011-06-28
        相关资源
        最近更新 更多