NodeJS和Express – 分开我的控制器和模型

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

在我说什么之前,抱歉我的英文不好。

然后,首先你需要创build你的控制器和模型文件夹。

你可以使用一个名为express-load的模块,它可以用来自动加载模型,路由,模式,configuration,控制器,对象映射…等等。

在你的主文件中,缅因被称为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; 

然后,你的视图文件夹,你可以创build文件夹,以保持你的代码组织,然后子文件夹,我创build一个文件夹称为 ,并在其内部我的索引视图。

在我的控制器文件夹中,我创build了一个名为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); } 

我通常做的是编写一个包含所有路由定义的模块,并将其加载到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

希望这是你在找什么。

有没有办法可以将这些分开?

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

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

这些控制器文件反过来很可能包括您的模型文件通过一个要求。 例如。

在app.js中

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

在routes \ 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 } 

在models \ blogModel.js中

 var something = function() { return "something"; }; module.exports = { something: something } 

你可以在这个回购https://github.com/hectorcorrea/hectorcorrea.com看到这个工作版本

你应该检查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 /快递/树/主/示例/路由分离

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

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

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