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