Skip to content

Commit

Permalink
Release v1.0.6 修正:对于autoIndex,只允许第一次查找(原始req.url)的情况下才能autoIndex;对于父目…
Browse files Browse the repository at this point in the history
…录递归查找,不允许autoIndex。
  • Loading branch information
Starrah committed Jul 2, 2020
1 parent 11c0f20 commit b8205b9
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 5 deletions.
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "express-router-dynamic",
"version": "1.0.5",
"version": "1.0.6",
"description": "A router used for load more routers based on directory structure.",
"main": "src/index.js",
"scripts": {
Expand Down
8 changes: 5 additions & 3 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ class DynamicRouter {
this.config = config
}

findListener(url: string, req?: express.Request): express.Router | RequestHandler | null {
findListener(url: string, req?: express.Request, autoIndex = false): express.Router | RequestHandler | null {
url = url.replace(/\/+$/, '')

for (let realPrefix of this.config.realPrefix) {
Expand Down Expand Up @@ -129,7 +129,7 @@ class DynamicRouter {
if (fileStatus.isFile())
//如果是文件直接返回
return sendFileRouter(targetFile)
else if (fileStatus.isDirectory()) {
else if (fileStatus.isDirectory() && autoIndex) {
//如果是目录或无后缀的js
//按autoIndex顺序依次检查目录下的文件
let router = null
Expand Down Expand Up @@ -157,16 +157,18 @@ export function dynamicRouter(userConfig?: Partial<typeof defaultConfig>): Reque
const manager = new DynamicRouter(config)
return (req, res, next) => {
let listener
let autoIndex = true
let currentFindUrl = req.url || '/'
// 对于获得的形如/aaa/bbb/ccc形式的url,应当依次查找/aaa/bbb/ccc、/aaa/bbb、/aaa、/ 四种listener,
// 并在调用listener之前从req.url中删除已经匹配到的部分。
// 例如,现在存在文件aaa/bbb.js,则应当以req.url="/ccc"来调用bbb.js中定义的Router。
// 这是为了保证如果bbb.js中有router.get("/ccc", ()=>{})这样的语句时能够正确处理。

while (true) {
listener = manager.findListener(currentFindUrl, req)
listener = manager.findListener(currentFindUrl, req, autoIndex)
if (listener || currentFindUrl === "/") break // 找到了,或者已经找完根路径了,就立即停止查找
currentFindUrl = Path.dirname(currentFindUrl) // 否则,在父路径查找
autoIndex = false
}

if (listener) {
Expand Down

0 comments on commit b8205b9

Please sign in to comment.