从url获取值

时间:2014-01-10 05:04:39

标签: node.js url

我必须从以下网址中提取访问令牌值。

http://localhost:4001/app1/#access_token=FH2yCAcgmPjMOtKcp3DE&refresh_token=pjgTyaj

如何使用node.js中的connect获取完整的url并获取access_token值? 我尝试使用req.urlreq.query来获取完整的网址。

3 个答案:

答案 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