-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
84 lines (63 loc) · 2.17 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
let fs = require('fs');
let path = require('path');
let resolve = require('path').resolve;
let express = require('express');
let appRoot = require('app-root-path').toString();
let router = express.Router();
function convertSep(pathString) {
if (path.sep == "/") return pathString;
let re = new RegExp("\\\\", 'g');
return pathString.replace(re, "/");
}
function getRouters(dirPath) {
let rootDir = resolve(dirPath);
let foundFiles = [];
function walkDir(dir) {
fs.readdirSync(dir).forEach(file => {
let fullPath = path.join(dir, file);
if (fs.lstatSync(fullPath).isDirectory())
walkDir(fullPath);
else {
if (file[0] != "_") {
foundFiles.push( convertSep(path.relative(rootDir, resolve(fullPath))) );
}
}
});
}
walkDir(dirPath);
return foundFiles;
}
module.exports = function(routesPath) {
let files = getRouters(routesPath);
let importRoot = path.join(appRoot, routesPath) + '/';
let indexRouters = {};
let indexs = files.filter(i => ((i.indexOf('/index.js') > -1) || (i == 'index.js') )).sort( (a,b) => (a.length - b.length) )
let subFiles = files.filter(i => ((i.indexOf('/index.js') == -1) && (i != 'index.js') )).sort( (a,b) => (a.length - b.length) )
for (let file of indexs) {
let subRouter = require(importRoot + file);
let parentRouter = router;
let fileInfo = path.parse(file);
let fileDir = fileInfo.dir || '/';
let fileParent = path.dirname(fileDir);
let routePath = '/'+path.basename(fileDir) || '/';
if (fileParent == '.') fileParent = "/";
if (indexRouters[fileParent]) {
parentRouter = indexRouters[fileParent];
}
parentRouter.use(routePath, subRouter);
indexRouters[fileDir] = subRouter;
}
for (let file of subFiles) {
let subRouter = require(importRoot + file);
let parentRouter = router;
let fileInfo = path.parse(file);
let fileDir = fileInfo.dir || '/';
let fileParent = fileDir;
let routePath = '/'+fileInfo.name || '/';
if (indexRouters[fileParent]) {
parentRouter = indexRouters[fileParent];
}
parentRouter.use(routePath, subRouter);
}
return router;
}