在"快速"中创建 MVC 模式,并将路由文件夹替换为控制器文件夹



新增快递。想要在 Express 中实现 MVC 模式,并将路由文件夹替换为控制器文件夹。我找到了这段代码,它实际上有效,但我真的不明白它的作用:

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 读取文件夹"控制器"的内容,对于它找到的每个文件,它都会执行一些我不明白的事情:

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

const route = require('./controllers/' + file(;//不明白这个

route.controller(app(;//不明白这个

你能帮忙吗?

谢谢。

您遵循的示例来自Tim Roberts的博客文章。示例控制器演示了它的全部内容:

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')
});
}

如果将此示例控制器保存在whatever.js下的controllers文件夹中,它只会导出一个函数controller,该函数将快速应用程序作为参数并向应用程序添加几个自定义路由。

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

const route = require('./controllers/' + file); 

在上面一行之后,route包含对包含此controller函数的模块的引用。

route.controller(app); 

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

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

相关内容

最新更新