nodejs動態路由js

該文件設置了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;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章