在express.js中间件请求中获取“#”之后的url

时间:2013-07-19 10:33:45

标签: javascript url hash express request

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

req.path ..

相同

有没有办法在express.js中找到#后的网址?

3 个答案:

答案 0 :(得分:18)

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

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

See other Stack Overflow post.

答案 1 :(得分:0)

浏览器将删除 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>

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

答案 2 :(得分:-1)

使用Node.js中提供的内置url module来解析网址并创建urlObject。这将有一个包含所需哈希片段的hash fragment属性。

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