36

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

req.path..

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

4

3 回答 3

53

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

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

但是,您可以的是使用客户端 Javascript 读取值window.location.hash并使用 XMLHttpRequest 将其发送到服务器。(请参阅其他 Stack Overflow 帖子。

于 2017-04-07T14:30:14.230 回答
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>

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

于 2021-07-30T06:07:37.990 回答
-4

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

const url = require('url')
const urlObj = url.parse(req.url)
console.log(urlObj.hash) // #some/url
于 2016-11-14T22:08:50.840 回答