Javascript 在Express中创建MVC模式,并用controllers文件夹替换routes文件夹

Javascript 在Express中创建MVC模式,并用controllers文件夹替换routes文件夹,javascript,node.js,express,model-view-controller,Javascript,Node.js,Express,Model View Controller,新的表达方式。希望在Express中实现MVC模式,并将routes文件夹替换为controller文件夹。我发现了这段代码,它实际上是有效的,但我并不真正理解它的作用: var fs = require('file-system'); fs.readdirSync('controllers').forEach(function (file) { if(file.substr(-3) == '.js') { const route = require('./

新的表达方式。希望在Express中实现MVC模式,并将routes文件夹替换为controller文件夹。我发现了这段代码,它实际上是有效的,但我并不真正理解它的作用:

var fs = require('file-system');    

fs.readdirSync('controllers').forEach(function (file) {
      if(file.substr(-3) == '.js') {
        const route = require('./controllers/' + file);
        route.controller(app);
      }
    })
readdirSync读取文件夹“controllers”的内容,对于找到的每个文件,它都会执行一些我不理解的操作:

if(file.substr(-3)='.js')//检查文件的结尾是否为.js,但为什么

const route=require('./controllers/'+文件)//我不明白这一点

路由控制器(app)//我不明白这一点

你能帮个忙吗


谢谢。

您下面的例子来自蒂姆·罗伯茨。示例控制器演示了它的全部功能:

var mongoose = require('mongoose')
var Video = require('../models/user');

module.exports.controller = function(app) {

  app.get('/signup', function(req, res) {
      // any logic goes here
      res.render('users/signup')
  });

  app.get('/login', function(req, res) {
      // any logic goes here
      res.render('users/login')
  });
}
如果将此示例控制器保存在
which.js
下的
controllers
文件夹中,则它将导出一个函数
controller
,该函数将express应用程序作为参数,并向应用程序添加两条自定义路由

然后,主模块扫描
controllers
文件夹下的所有此类文件,并首先使用
require
功能加载模块:

const route = require('./controllers/' + file); 
在上述行之后,
路由
包含对包含此
控制器
功能的模块的引用

这个

只需调用从模块导出的函数,将全局
app
作为参数传递

通过这种方式,您只需在
controllers
文件夹下创建单独的
.js
模块即可轻松扩展应用程序,这些模块遵循相同的约定(导出
controller
函数)

route.controller(app);