該文件設置了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;