Express.js是内部的,在app对象上存储了mount路径?

时间:2018-03-07 13:14:48

标签: javascript node.js express express-router

我面对一个非常具体的用例,我需要在迭代app对象时访问各种express子应用程序的挂载路径。

示例代码:

const express = require("express")
const app = express()

app.use("/users", new usersRouter())
app.use("/flowers", new flowersRouter())

// Later in code...
app.get("/something", (req, res, next) => checkAppObject(app, next))

function checkAppObject(app, next) {
    // Where are stored the "/users" and "/flowers" info ?
    console.log(app) 
    next()
}

我在任何地方都找不到

1 个答案:

答案 0 :(得分:1)

事实证明,express app对象包含一个内部_router.stack属性,该属性由一组Layer个对象填充。

执行app.use('/path', someFunc)时,express会添加Layer个对象,如果此someFun也是路由器(app个对象本身),那么layer.handle对象还将包含自己的stack属性(以递归方式等)。

因此,访问安装点的唯一方法是在regexp内的此图层对象上。人们必须序列化正则表达式或其他东西(如果可能的话,请参阅this

如果挂载路径为"/batchs",则图层对象上的值为:

{ /^\/batchs\/?(?=\/|$)/i fast_star: false, fast_slash: false }

在我的电脑上。

希望这有帮助