Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript NodeJS和Express-分离我的控制器和模型_Javascript_Node.js_Model View Controller_Express - Fatal编程技术网

Javascript NodeJS和Express-分离我的控制器和模型

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

我正在构建我的第一个Express应用程序。这有点混乱,因为我的控制器和模型都在同一个地方:app.js文件。 有没有办法把它们分开?
甚至是人为地,通过创建不同的文件,然后使用一些第三方程序将它们编译成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=路由器哪一个更好?这两种方法的利弊是什么?