使用Express.JS的基本MVC原则

时间:2015-02-06 17:08:31

标签: javascript node.js model-view-controller express

express.js 为您提供了一个体面的准系统来实现标准的 MVC 开发模式。但是,我见过的大多数教程都在路由文件或全局应用程序文件中应用控制器逻辑。

在理想的世界中:

模型 - 管理基本行为和数据

控制器 - 向模型和视图发送命令

查看 - 从模型中呈现数据


目前我有以下内容:

routes / index.js - 指向动作的路线

router.get('/hotels', function(req, res, next) {
    hotels.run(req, res, next);
    next();
});

controllers / hotels.js - 控制器向模型发送命令

module.exports = {
    run: function(req, res, next) {
        var users = new require('../models/hotels');
        users.run(function(callback) {
            res.render('hotels', { title: 'Hotels page', users: callback });
        }); 
    }
}

models / hotel.js - 请求数据的模型

module.exports = {
    run: function(callback) {
        connection.query(sql, function(err, rows, fields) {
            callback(rows);
            //console.log(rows);
        });
    }
}

无论我尝试什么,我都无法从模型中获取数据以返回控制器然后传递给视图。据我所知,上述代码中可能存在多个错误,因为我是新来的。但基本面应该没问题,并且我希望它显而易见的是为什么我无法返回模型数据,因为除了回调之外的所有逻辑都可以工作。

1 个答案:

答案 0 :(得分:0)

如果人们希望在express.js项目中使用类似的MVC方法,我相信我已经解决了这个问题。

routes.js - 改为匹配凯文的清洁方法。

router.get('/hotels', hotels.run);

controller / hotels.js -

module.exports = {
    run: function(req, res, next) {
        var users = new require('../models/hotels');
        users.run(function(err, callback) {
            res.render('hotels', { title: 'Hotels page', users: callback });
        });
    }
}

模型/ hotel.js

module.exports = {
    run: function(callback) {
        connection.query(sql, function(err, rows, fields) {
            callback(err, rows);
        });
    }
}

所以现在模型按照控制器的请求返回查询,使控制器能够将数据传递给视图。