5

我正在构建我的第一个 Express 应用程序。这有点乱,因为我的控制器和模型都在同一个地方:app.js 文件。有没有办法可以将它们分开?甚至人为地,通过创建不同的文件,然后使用一些第三方程序将它们编译成 app.js 文件。

4

5 回答 5

7

首先,您需要创建控制器和模型文件夹。

您可以使用一个名为 express-load 的模块,该模块可用于自动加载模型、路由、模式、配置、控制器、对象映射......等等......

在你的主文件中,我的名为 app.js 你在启动服务器代码行之前加载它们..它应该看起来像

//requires....
var load = require('express-load');

//your code 

load('models')
.then('controllers')
.then('routes')
.into(app);

http.createServer(app).listen(app.get('port'), function(){
    console.log("Express listening on port "+ app.get('port'));
});

module.exports = app;

然后,您的视图文件夹可以创建文件夹以保持代码井井有条,然后是子文件夹,我创建了一个名为home的文件夹,并在其中创建了我的索引视图。

在我的控制器文件夹中,我创建了一个名为 home.js 的 js 文件,它将查找我的索引视图:

module.exports = function(app){

    var HomeController = {
        index: function(req, res){
            res.render('home/index');
        }
    };
    return HomeController;
}

最后在你的路由文件夹中,你可以设置你的应用程序路由,每个视图都需要在你的控制器中指定。我的路由文件名为 home.js

module.exports = function(app){
    var home = app.controllers.home;

    app.get('/', home.index);
}
于 2015-01-28T13:45:27.323 回答
2

您应该查看 Express Github 存储库中的示例,有多种方法可以做到这一点(根据个人喜好):

https://github.com/visionmedia/express/tree/master/examples/mvc https://github.com/visionmedia/express/blob/master/examples/resource/app.js https://github.com/ visionmedia/express/tree/master/examples/route-separation

于 2013-11-15T08:30:08.210 回答
2

有没有办法可以将它们分开?

是的,你应该把它们分开。

大多数人所做的是在 app.js 主文件中声明路由并为控制器包含单独的文件(就像 Rituparna 描述的那样)。

反过来,这些控制器文件很可能会通过 require 包含您的模型文件。例如。

在 app.js 中

var blogRoutes = require('./routes/blogRoutes');
app.get('/api/blog/all', blogRoutes.all);

在路线\blogRoutes.js

var model = require('../models/blogModel');
var all = function(req, res) {

   // your controller logic
   // and very likely calls to your model
   var m = model.blog(whatever);
   res.send(m.something());
};

module.exports = {
  all: all
}

在模型\blogModel.js

var something = function() {
    return "something";
};

module.exports = {
  something: something
}

您可以在此回购https://github.com/hectorcorrea/hectorcorrea.com中看到此版本的工作版本

于 2013-11-14T13:48:27.067 回答
2

我通常做的是编写一个包含所有路由定义的模块并将其加载到app.js例如

require('./routes')(app);

我的./routes.js一般看起来像这样

module.exports = function (app) {

        log.info('Loading express routes...');

        /* registration */
        app.post('/users', require('./routes/register-users'));    // register user
        app.post('/agents', require('./routes/register-agents'));    // register agents
};

我将所有路由(.js)文件保存在目录调用中routes

希望这是您正在寻找的。

于 2013-11-14T12:40:41.983 回答
0

这里有一些例子可以帮助你..

路由分离:https ://github.com/visionmedia/express/tree/master/examples/route-separation

MVP:https ://github.com/visionmedia/express/tree/master/examples/mvc

于 2013-11-14T18:00:54.157 回答