【问题标题】:get url after "#" in express.js middleware request在 express.js 中间件请求中获取“#”之后的 url
【发布时间】:2013-07-18 14:47:03
【问题描述】:

我需要在服务器中间件上获取 url(使用 express.js)。我使用req.url,但是当url从/#some/url开始时req.url返回/...

req.path.. 相同。

有没有办法在express.js中获取#之后的url?

【问题讨论】:

标签: javascript url hash express request


【解决方案1】:

否。 URL 中以 # 符号开头的部分永远不会发送到服务器。

URL 中的# 符号是为了引入fragment identifier。这用于链接到页面的特定部分。如果浏览器加载/#some/url,它将有效加载/,并跳转到带有id="some/url"(如果存在)的HTML 元素。分片标识符仅与浏览器相关,因此不会随 HTTP 请求一起发送。

可以做的事情是使用客户端 Javascript 读取 window.location.hash 的值并使用 XMLHttpRequest 将其发送到服务器。 (See other Stack Overflow post.)

【讨论】:

    【解决方案2】:

    URL 中#(哈希符号)之后的任何路径/查询参数都将被浏览器删除。

    这可以通过一个小技巧来处理,方法是用 HTML/EJS 文件的脚本标签中的 EMPTY 字符串替换哈希,这将删除哈希,整个 URL 将被传递到服务器。

    在服务器端呈现应用程序的情况下,在 404 中应用上述技术会将重定向路由回有效路由器。

    <script>
      const hash = window.location.hash;
      if(hash.length > 0 && hash.includes("#/")) {
        window.location.replace(window.location.href.replace('#/',''));
      }
    </script>
    

    这在我的应用程序中运行良好。感谢我的队友修复此问题。

    【讨论】:

      【解决方案3】:

      使用 Node.js 中内置的 url module 解析 URL 并创建一个 urlObject。这将有一个 hash 片段属性,其中包含您想要的哈希片段。

      const url = require('url')
      const urlObj = url.parse(req.url)
      console.log(urlObj.hash) // #some/url
      

      【讨论】:

      • 除非#-part 没有传输到服务器。
      • 我在本地尝试过,我运行一个 url,如:over-1000-car-911-white-vin#lala,然后在 nodejs 中,console.log('req.url', url.parse (req.url)) console.log('req.originalUrl ', url.parse(req.originalUrl)) 并且哈希符号永远不会像你说的那样被读取
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-25
      • 1970-01-01
      • 2015-08-21
      • 1970-01-01
      • 2011-05-01
      • 1970-01-01
      相关资源
      最近更新 更多