实现Express.js的动态路由加载

  事情是这样的,实验室项目需要建立一个展示性的网页,展示实验室完成的虚拟仿真实验。这个网站肯定是随着项目的积累而越来越大的,路由也是这样。目前的路由设置就已经很可观了,十几个。不能忍。

  于是,我开始考虑,将路由搞成动态添加的。最开始,思路比较简单,利用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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值