如何将带有哈希的URL发送到Node.js

7

我如何向nodejs发送带有哈希的URL?

当我尝试发送一个带有哈希的URL时,它无法工作,但使用 ? 可以工作。

const url = require('url');
const qs = require('querystring');
const http = require('http');
    
http.createServer(server).listen(1337, 'hostname');

function server(req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.write(req.url);
    
    var currentURL = url.parse(req.url, true);
    console.log(currentURL);
    res.end('\nHello World\n');
}
    
console.log('Server running at http://127.0.0.1:1337/');

使用案例:Facebook的access_token URL格式与上述类似。

2
当您像这样请求URL http://host:1337/#A=1111111时,它只会将此发送到服务器http://host:1337/,并将此片段发送到浏览器#A=1111111。Facebook在浏览器中本地获取此URL,解析它并将其更改为一个获取变量,如http://host:1337/?A=11111111然后使用AJAX请求数据,解析所有数据,并将其写入浏览器。这是一种旧技术,需要使用“onhashchange”事件,目前最好的方法是实现pushState并更改整个URL,而不刷新页面。 - neojp
1个回答

22

URL中'#'标记后面的部分称为fragment,它不会发送到服务器。如果您在片段中存储数据,则由您处理该数据并使用GET参数进行ajax请求。


2
Facebook正在使用http://servername:port/path#access_token=somestring的格式回调开发服务器。 - Raxit Sheth
我真希望他们不要关闭这个问题。这个Facebook片段真的很烦人。 - Gavin
我认为这是OAuth2的一部分,而不是特定于Facebook的。我怀疑这样做是有意为之的,以防止其在更多自动化的服务器端身份验证流程中使用。 - Marc Stober

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接