Javascript NodeJS和Express-分离我的控制器和模型
我正在构建我的第一个Express应用程序。这有点混乱,因为我的控制器和模型都在同一个地方:app.js文件。 有没有办法把它们分开?Javascript NodeJS和Express-分离我的控制器和模型,javascript,node.js,model-view-controller,express,Javascript,Node.js,Model View Controller,Express,我正在构建我的第一个Express应用程序。这有点混乱,因为我的控制器和模型都在同一个地方:app.js文件。 有没有办法把它们分开? 甚至是人为地,通过创建不同的文件,然后使用一些第三方程序将它们编译成app.js文件。我通常做的是编写一个包含所有路由定义的模块,并将其加载到app.js中 require('./routes')(app); 我的/routes.js通常如下所示 module.exports = function (app) { log.info('Load
甚至是人为地,通过创建不同的文件,然后使用一些第三方程序将它们编译成app.js文件。我通常做的是编写一个包含所有路由定义的模块,并将其加载到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文件中声明路由,并为控制器包含单独的文件(就像Rituparna所描述的那样)
这些控制器文件很可能通过require包含您的模型文件。比如说
在app.js中
var blogRoutes = require('./routes/blogRoutes');
app.get('/api/blog/all', blogRoutes.all);
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
}
var something = function() {
return "something";
};
module.exports = {
something: something
}
在routes\blogrouts.js中
var blogRoutes = require('./routes/blogRoutes');
app.get('/api/blog/all', blogRoutes.all);
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
}
var something = function() {
return "something";
};
module.exports = {
something: something
}
在models\blogModel.js中
var blogRoutes = require('./routes/blogRoutes');
app.get('/api/blog/all', blogRoutes.all);
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
}
var something = function() {
return "something";
};
module.exports = {
something: something
}
您可以在本回购协议中看到该协议的有效版本,这里有一些示例可能会对您有所帮助 路线分隔:
MVP:您应该查看快速Github回购中的示例,有多种方法可以做到这一点(基于个人偏好):
首先,您需要创建控制器和模型文件夹 您可以使用名为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的文件夹,并在其中创建了我的index视图
在我的控制器文件夹中,我创建了一个名为home.js的js文件,该文件将查找我的索引视图:
module.exports = function(app){
var HomeController = {
index: function(req, res){
res.render('home/index');
}
};
return HomeController;
}
最后,在routes文件夹中,您可以设置应用程序路由,每个视图都需要在控制器中指定。我的路由文件名为home.js
module.exports = function(app){
var home = app.controllers.home;
app.get('/', home.index);
}
另一个例子是,在整个应用程序的上下文中,at代码>在app.js中。在users.js中:
var express=require('express');var router=express.router();get('/',函数(req,res,next){…});module.exports=路由器代码>哪一个更好?这两种方法的利弊是什么?