该文件设置了nodejs动态加载路由js文件的过程,路径文件放置在工程的routes文件夹下,该文件夹下的所有文件的路由前缀都会被重置 eg:
如上图的文件路径,在经过动态路由js处理后user文件夹下的所有路由都会默认加”user/”前缀,login.js里的路由会自动加上”user/login”前缀,index.js只会加上”user/”前缀。其他文件夹的路由相似。
经过动态路由文件处理后的结果为:
“routes/user/index.js” —–> 路径前缀为”user/”
“routes/user/login.js” —–> 路径前缀为”user/login”
“routes/index.js” —–> 路径前缀为”/”
var fs = require("fs");
var loadRoute = {
path : './routes/',
app : null,
listDir : function(dir){
var fileList = fs.readdirSync(dir,'utf-8');
for(var i=0;i<fileList.length;i++) {
var stat = fs.lstatSync(dir + fileList[i]);
if (stat.isDirectory()) {
this.listDir(dir + fileList[i] + '/');
} else {
this.loadRoute(dir + fileList[i]);
}
}
},
loadRoute : function(routeFile){
var route = require(routeFile.substring(0,routeFile.lastIndexOf('.')));
//完整的请求路径
var routePath = routeFile.substring(8,routeFile.lastIndexOf('.'));
if(routePath.length >= 5){
//除去index的有效路径
if(routePath.substring(routePath.length-5)=="index"){
var validPath = routePath.substring(0,routePath.length-5);
this.app.use(validPath,route);
}else{
this.app.use(routePath,route);
}
}else{
this.app.use(routePath,route);
}
},
init : function(app,path){
if(!app){
console.error("系统主参数App未设置");
return false;
}
this.app = app;
this.path = path?path:this.path;
this.listDir(this.path);
}
};
module.exports = loadRoute;