NodeJS和Express - 将我的控制器和模型分开
NodeJS and Express - separate my controllers and models
我正在构建我的第一个Express应用程序。这有点混乱,因为我的控制器和我的模型都在同一个地方:app.js文件。有没有办法将它们分开?即使是人为地,通过创建不同的文件,然后使用一些第三方程序将它们编译到应用程序.js文件中。
首先,您需要创建控制器和模型文件夹。
您可以使用一个名为 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;
}
最后,在路由文件夹中,您可以设置应用程序路由,每个视图都需要在控制器中指定。我的路由文件称为家.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
希望这是你要找的。
有没有办法将它们分开?
是的,您应该将它们分开。
大多数人所做的是在主应用程序.js文件中声明路由,并为控制器包含单独的文件(就像 Rituparna 描述的那样)。
这些控制器文件反过来很可能通过要求包含您的模型文件。例如。
在应用中.js
var blogRoutes = require('./routes/blogRoutes');
app.get('/api/blog/all', blogRoutes.all);
在路由''博客路由中.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
}
在模型''博客模型中.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/mvchttps://github.com/visionmedia/express/blob/master/examples/resource/app.jshttps://github.com/visionmedia/express/tree/master/examples/route-separation
一些例子可能会对你有所帮助。
路线分隔:https://github.com/visionmedia/express/tree/master/examples/route-separation
最有价值球员:https://github.com/visionmedia/express/tree/master/examples/mvc
- 将不在模型中的数据返回到mvc控制器
- 当显式定义控制器参数时,默认模型绑定器会发生异常
- 模型数据未通过窗体传播到控制器ASP.NET MVC4
- 概念验证模型控制器调用正确的实例
- 如何从其他控制器更改角度模型值
- 如何在打开模型时动态加载控制器文件
- 如何从另一个控制器更新控制器的ng重复模型
- 控制器内部无法访问Angular js输入模型
- 将视图链接到模型并将视图链接至控制器的代码位于何处
- 控制器内部的scope函数不根据视图中的ng模型更新值
- 如何将值与$scope绑定,以从定义状态ui路由器的控制器中使用ng模型进行查看
- ng模型跨多个控制器或视图
- 在控制器中将 ng 模型值返回为空的指令
- 一个控制器如何在 Ember .js 中观察任意控制器/模型上的事件
- NodeJS和Express - 将我的控制器和模型分开
- 节点.js中的模型-视图-控制器模式
- Ember.js:如何使用模型的单个实例创建路由/控制器
- 控制器是否应直接访问视图的模型
- 使用JSON/Javascript将表值返回给视图模型/控制器
- Emberjs:正确绑定模型/控制器/视图与夹具数据