一个完整的URL字符串中,从"?"(不包括?)到"#"(如果存在#)或者到该URL字符串结束(如果不存在#)的这一部分称为查询字符串.
可以使用Query String模块中的parse方法将该字符串转换为一个对象,parse方法的使用方式如下所示:
querystring.parse(str,[sep],[eq],[options]);
str表示被转换的查询字符串,
sep.字符串中的分隔符,默认是&
eq.该字符串中的分配符,默认为=."="左边是key,右边是value
options:是一个对象,可以在该对象中使用一个整数值类型的maxKeys属性来指定转换后的对象中的属性个数,如果将maxKeys属性值设定为0.其效果等于不使用maxKeys属性值
var querystring=require("querystring"); var str="username=guoyansi&age=40&sex=male"; var res=querystring.parse(str); console.log("1:%j",res);//1:{"username":"guoyansi","age":"40","sex":"male"} res=querystring.parse(str,"!"); console.log("2:%j",res);//2:{"username":"guoyansi&age=40&sex=male"} res=querystring.parse(str,"&"); console.log("3:%j",res);//3:{"username":"guoyansi","age":"40","sex":"male"} str="username=guoyansi!age=40!sex=male"; res=querystring.parse(str,"!"); console.log("4:%j",res);//4:{"username":"guoyansi","age":"40","sex":"male"} res=querystring.parse(str,"!","="); console.log("5:%j",res);//5:{"username":"guoyansi","age":"40","sex":"male"} res=querystring.parse(str,"!",":"); console.log("6:%j",res);//6:{"username=guoyansi":"","age=40":"","sex=male":""} res=querystring.parse(str,"!","=",{maxKeys:2}); console.log("7:%j",res);//7:{"username":"guoyansi","age":"40"}
stringify是将字符串转化成查询字符串的格式.
querystring.stringify(obj,[sep],[eq])
var querystring=require("querystring"); var res= querystring.stringify({"username":"guoyansi","age":"40","sex":"male"}); console.log(res);//username=guoyansi&age=40&sex=male res=querystring.stringify({"username":"guoyansi","age":"40","sex":"male"},"!"); console.log(res);//username=guoyansi!age=40!sex=male res=querystring.stringify({"username":"guoyansi","age":"40","sex":"male"},"&",":"); console.log(res);//username:guoyansi&age:40&sex:male res=querystring.stringify({"username":"guoyansi","age":["40","24"]},"&","="); console.log(res);//username=guoyansi&age=40&age=24
在url模块中,可以使用parse()方法将URL字符串转换为一个对象,根据URL字符串中的不同内容,该对象可能具有的属性及其含义如下.
href:被转换的原URL字符串.
protocol:客户端发出请求时使用的协议.
slashes:在协议与路径中间时候使用"//"分隔符.
host:URL字符串中的完整地址及端口号,该地址可能为一个IP地址,也可能为一个主机名.
auth:URL字符串中的认证信息部分.
hostname:URL字符串中的完整地址,该地址可能为一个IP地址,也可能为一个主机名.
search:Url字符串中的查询字符串,包含起始字符"?"
path:url字符串中的路径,包含查询字符串.
query:url字符串中的查询字符串,不包含起始字符"?",或根据该查询字符串而转换的对象(根据parse()方法所用参数而决定query属性值);
hash:url字符串中的散列字符串,包含起始字符"#".
url.parse(urlstr,[parseQueryString]);
urlStr:是需要转换的URL字符串,
parseQueryString:是一个布尔值,当参数为true时,内部使用querystring模块查询字符串转换为一个对象,参数值为false时不执行该转换操作,默认是false
var url=require("url"); var str="http://user:pass@host,com:8080/users/user.php?username=sisi&age=24&sex=male#name1"; var res=url.parse(str); console.log(res);
{ protocol: 'http:', slashes: true, auth: 'user:pass', host: 'host:8080', port: '8080', hostname: 'host', hash: '#name1', search: '?username=sisi&age=24&sex=male', query: 'username=sisi&age=24&sex=male', pathname: '/,com/users/user.php', path: '/,com/users/user.php?username=sisi&age=24&sex=male', href: 'http://user:pass@host:8080/,com/users/user.php?username=sisi&age=24&sex=male#name1' }
var url=require("url"); var str="http://user:pass@host,com:8080/users/user.php?username=sisi&age=24&sex=male#name1"; var res=url.parse(str,true); console.log(res);
{ protocol: 'http:', slashes: true, auth: 'user:pass', host: 'host:8080', port: '8080', hostname: 'host', hash: '#name1', search: '?username=sisi&age=24&sex=male', query: { username: 'sisi', age: '24', sex: 'male' }, pathname: '/,com/users/user.php', path: '/,com/users/user.php?username=sisi&age=24&sex=male', href: 'http://user:pass@host:8080/,com/users/user.php?username=sisi&age=24&sex=male#name1' }
第一个例子和第二个例子不同之处在于parse的第二个参数,导致了结果中的query的不同
可以将一个url转换过的对象转换成一个url字符串.
var url=require("url"); var str="http://user:pass@host,com:8080/users/user.php?username=sisi&age=24&sex=male#name1"; var res=url.parse(str,true); console.log(url.format(res));
结果是:
http://user:pass@host:8080/,com/users/user.php?username=sisi&age=24&sex=male#name1
以上就是node中转换URL字符串与查询字符串的全部内容了,好好研究下,其实挺简单的。
问题内容: 您是否知道可以将Map转换为URL友好的查询字符串的任何实用程序类/库? 例: 我有一张地图: 我想得到: 最终输出 问题答案: 我看到的最可靠的组件是Apache Http Compoments(HttpClient 4.0)的URLEncodedUtils类。 该方法是您所需要的。 它不使用map,因此您可以使用重复的参数名称,例如, 并非我建议使用这种类型的参数名称。
问题内容: 在Python中,什么时候以及什么时候使用字符串连接与字符串替换比较容易。由于字符串连接的性能有了很大的提高,这(成为更多)是一种风格上的决定,而不是一种实际的决定吗? 举一个具体的例子,如何处理灵活的URI: 编辑:也有关于加入字符串列表和使用命名替换的建议。这些是中心主题的变体,即在什么时候做正确的方法?感谢您的回复! 问题答案: 根据我的机器,连接的速度(明显)更快。但是从风格上
问题内容: 如何将经典字符串转换为f字符串? 输出: 所需的输出: 问题答案: f字符串是 语法 ,而不是对象类型。您不能将任意字符串转换为该语法,该语法会创建一个字符串对象,而不是相反。 我假设您想用作模板,因此只需在对象上使用方法: 如果要提供可配置的模板服务,请创建一个包含所有可以插值的字段的名称空间字典,并与调用语法一起使用以应用名称空间: 然后,用户可以在字段中的名称空间中使用任何键(或
我遇到了这样一个java字符串,其中以下内容是错误的: 我想这是因为字符串构造函数默认将主体字节[]的编码视为UTF-8,我不是100%确定。我如何能够将此字符串存储在字节[]中,并能够稍后将其转换回来?我想我需要能够确定字节[]的编码方式。我该怎么做呢? 一些上下文:我需要字节[],以便压缩数据,将其存储在数据库中,然后解压缩并将未压缩的字节[]转换回原始字符串。这个字符串最初来自某个下载了网页
问题内容: 是否有任何JavaScript库可以根据查询字符串,样式生成字典? 可以像这样使用的东西: “查询字符串”是否在.NET领域之外称为其他名称?为什么不分解为键/值集合? 编辑:我已经编写了自己的函数,但是任何主要的库都可以这样做吗? 问题答案: 是否有任何JavaScript库可以根据查询字符串,样式生成字典? 可以像这样使用的东西: “查询字符串”是否在.NET领域之外称为其他名称?
问题内容: 是否可以将模板字符串创建为常规字符串 然后将其转换为模板字符串 没有,以及其他动态代码生成方式? 问题答案: 由于您的模板字符串必须动态地(在运行时)引用该变量,因此答案是: 否,没有动态代码生成是不可能的。 但这很简单: