【问题标题】:How can I find the originally matched route at the time of a request in Express.Js如何在 Express.Js 中请求时找到最初匹配的路由
【发布时间】:2014-02-15 15:51:37
【问题描述】:

我需要在请求时恢复原始路由。带有 :Variable 字符串的原始字符串或正则表达式。基本上,我希望有一些键将所有到达同一路由的请求分组到一个通用的高级预处理器中。

问题是我的路由对于嵌套的应用程序和路由器来说相当复杂,所以 app.routes.map 不包含路由。

有没有办法从请求对象对路由进行逆向工程,或者是否有一个地方可以让我获得可以匹配和搜索当前请求的全局路由列表?

【问题讨论】:

  • console.dir(Object.keys(req)) 的输出是:[ '_readableState', 'readable', 'domain', '_events', '_maxListeners', 'socket', 'connection', 'httpVersion', 'complete', 'headers', 'trailers', '_pendings', '_pendingIndex', 'url', 'method', 'statusCode', 'client', '_consuming', '_dumped', 'httpVersionMajor', 'httpVersionMinor', 'upgrade', 'originalUrl', '_parsedUrl', 'query', 'res', 'next' ]

标签: regex node.js express routing


【解决方案1】:

具体路线应该在req.routedocs)中可以找到。其中包含多个属性,包括req.route.regexp(路由的编译正则表达式)和req.route.params(匹配参数数组)。

编辑:在分派请求之前不会附加路由。

听起来您正试图在发送之前预测路线。在这种情况下,使用app.routes 可能正常工作。问题是您有带有自己路由器的子应用程序。 app.routes 仅包含顶级 app 的路由,不包含任何子应用程序。

答案是:没有全局视图。您的子应用看起来与父应用的中间件完全一样。它不知道也不关心那里有路由。

如果您需要这样做,您必须手动进行,例如,创建一个全局数组来注册您的子应用程序。

【讨论】:

  • req.route 未定义。我在 app.use 处理程序中执行此操作,但此应用程序不直接包含路由。它们是使用 new express.Router() 和 app.use(..., router.middleware) 从单独的路由器加载的;
  • @Killroy,如果您想在发送路线之前找出路线,则无法自动执行此操作。您必须手动跟踪它们。查看更新的答案。
  • 这最终是我的工作。我想知道是否有办法事先在 URL 上运行路由过程。
猜你喜欢
  • 2013-07-26
  • 1970-01-01
  • 2018-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-03
  • 2019-08-27
  • 1970-01-01
相关资源
最近更新 更多