事情是这样的,实验室项目需要建立一个展示性的网页,展示实验室完成的虚拟仿真实验。这个网站肯定是随着项目的积累而越来越大的,路由也是这样。目前的路由设置就已经很可观了,十几个。不能忍。
于是,我开始考虑,将路由搞成动态添加的。最开始,思路比较简单,利用node.js的文件系统,读取文件名、路径,然后,添加到routes/index.js里去。因为也是新手,对node提供的api函数不是很熟悉,查了很多资料,大概写了这么点程序。
var routerName = [];//最开始,我是想用数组存储的,但是,最后,因为需要路由需要html文件名,而模板匹配需要上一级的目录,所以,最后,我又脑袋一拍,用对象(键值对的思想)存储,于是有了下面的tree;
var fs = require('fs');
var dir =__dirname.replace("routes","views");
var tree = {};
//定义递归函数方法,遍历文件夹中的html文件,这个方法,作为本科非科班的我,只能说,知道而想不到,学到了,学到了
function walk(path){
var dirList = fs.readdirSync(path);
dirList.forEach(function(item){
if(fs.statSync(path + '/' + item).isFile()&&item.indexOf(".html")>-1){
routerName.push(path+ '/' +item);
var name = '/' + item;
var pathWhole = path + '/' + item;
var pathRoute = pathWhole.substring((dir.length),(pathWhole.length));
tree[name] = pathRoute;
}
});
dirList.forEach(function(item){
if(fs.statSync(path + '/' + item).isDirectory()){
walk(path + '/' + item);
}
});
}
//判断路由目录下的所有html文件
if(fs.existsSync(dir)){
fs.readdir(dir,function(err,file){
if(err){
throw err;
return;
}
else{
walk(dir);
console.log(routerName);
console.log(tree);
}
});
}
else{
console.log("Sorry! " + dir + " Not Found.")
}
//这里存在问题,只有第一个index能进去,应该因为for进入循环了,所以之后的所有路由都进不去了,这里我也明白,node不陷入循环是一个重要的点,这应该明白的。最后,其实对象的方法应该也是不行的吧,没尝试
/*for(var i=0;i<routerName.length;i++){
router.get('/'+routerName[i],function(req,res){
res.render(routerName[i]);
});
}*/
看了这么一片博文,希望有用:
https://www.cnblogs.com/bling/p/5541680.html
************************************2018/11/16/21.46