我有这个示例URL(引用)。
http://172.20.0.83:30923/oauth/authorize?client_id=8193654a-0b63-41df-953e-e6ae10807935&client_secret=somesecret&response_type=code&state=somestate=&redirect_uri=https://somestring.ngrok.io/api/oauthcallback
我需要提取“状态”字段的值。 (在这种情况下为“ somestate”)。我试图用substr()来做,但是我必须计算base64编码的子字符串的长度。 (不是很动态或安全)
作为替代方案,我会将其转换为JSON并尝试从JSON中提取。
非常感谢。
答案 0 :(得分:3)
在处理标准数据格式时,请勿尝试使用正则表达式或substr滚动自己的解析器。这是一个URL。查找现有的URL解析器。
Node.js是distributed with one!
const referer = "http://172.20.0.83:30923/oauth/authorize?client_id=8193654a-0b63-41df-953e-e6ae10807935&client_secret=somesecret&response_type=code&state=somestate=&redirect_uri=https://somestring.ngrok.io/api/oauthcallback";
const parsed_url = new URL(referer);
const state = parsed_url.searchParams.get("state");
console.log(state);
NB:如文档所述,Node有两个URL解析器。 URL
全局模块和url
模块,您可以require
。您需要一个相对较新的Node版本才能使用URL
全局变量。如果没有,请升级Node.js安装。
作为替代方案,我会将其转换为JSON并尝试从JSON中提取。
这将是一条红鲱鱼。要将其转换为JSON,您首先需要对其进行解析。拥有解析的数据后,仍然只能将其转换为JSON,而只是立即将其转换回已有的解析数据。
答案 1 :(得分:2)
var url_string = "http://172.20.0.83:30923/oauth/authorize?client_id=8193654a-0b63-41df-953e-e6ae10807935&client_secret=somesecret&response_type=code&state=somestate=&redirect_uri=https://somestring.ngrok.io/api/oauthcallback"; // or you can use window.location.href
var url = new URL(url_string);
var c = url.searchParams.get("state");
console.log(c);
答案 2 :(得分:1)
您需要使用Node.js内置的querystring模块。您可以像这样使用它:
var url = require('url');
var querystring = require('querystring');
var str = 'http://172.20.0.83:30923/oauth/authorize?client_id=8193654a-0b63-41df-953e-e6ae10807935&client_secret=somesecret&response_type=code&state=somestate&redirect_uri=https://somestring.ngrok.io/api/oauthcallback';
var state = querystring.parse(url.parse(str).query).state; // somestate