我必须从以下网址中提取访问令牌值。
http://localhost:4001/app1/#access_token=FH2yCAcgmPjMOtKcp3DE&refresh_token=pjgTyaj
如何使用node.js中的connect获取完整的url并获取access_token值?
我尝试使用req.url
和req.query
来获取完整的网址。
答案 0 :(得分:1)
<强>更新强>
http客户端在查询之前删除了网址的#个片段 页面的服务器,所以服务器永远不能访问它,那是 仅适用于浏览器。
当代理(浏览器)从服务器请求资源时,代理会将唯一的URI发送到服务器(而不是片段)。相反,代理等待服务器发送响应,然后代理根据文档类型和片段值处理资源。 [source&amp;有关详细信息,请参阅link]
所以,如果你在片段中有任何数据,那么你需要处理那些数据(AJAX)
<小时/> 您可以考虑在客户端JavaScript(
window.location.hash
)上获取哈希并将其发送给服务器。
如果你得到这样的字符串,这是一个例子:
var req_url = 'http://localhost:4001/app1/#access_token=FH2yCAcgmPjMOtKcp3DE&refresh_token=pjgTyaj';
HashKeyValueParsed_JSON = {};
require('url').parse(req_url).hash.substring(1).split('&').forEach(function (x) {
var arr = x.split('=');
arr[1] && (HashKeyValueParsed_JSON[arr[0]] = arr[1]);
});
console.log(HashKeyValueParsed_JSON); //Output JSON: { access_token: 'FH2yCAcgmPjMOtKcp3DE', refresh_token: 'pjgTyaj' }
您将获得输出:
{ access_token: 'FH2yCAcgmPjMOtKcp3DE',
refresh_token: 'pjgTyaj' }
我建议你将所有需求保持在循环或任何函数之外,因为它是Node.js中的阻塞调用(即使它使用缓存[这里是源link])。 有关详细信息,请参阅此answer。
答案 1 :(得分:1)
根据nodejs url with hash,网址的哈希部分不会发送到服务器。您应该尝试按查询发送access_token
。
答案 2 :(得分:0)
以#
开头的网址部分称为fragment identifier或哈希。解析url将产生哈希值。
如果req.url
返回'http://localhost:4001/app1/#access_token=FH2yCAcgmPjMOtKcp3DE&refresh_token=pjgTyaj'
,则require('url').parse(req.url)
会返回
{ protocol: 'http:',
slashes: true,
auth: null,
host: 'localhost:4001',
port: '4001',
hostname: 'localhost',
hash: '#access_token=FH2yCAcgmPjMOtKcp3DE&refresh_token=pjgTyaj',
search: null,
query: null,
pathname: '/app1/',
path: '/app1/',
href: 'http://localhost:4001/app1/#access_token=FH2yCAcgmPjMOtKcp3DE&refresh_token=pjgTyaj' }
因此,您要查找的部分位于已解析URL的hash
属性中:
require('url').parse(req.url).hash