nodejs中转换URL字符串与查询字符串详解


Posted in NodeJs onNovember 26, 2014

一个完整的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字符串与查询字符串的全部内容了,好好研究下,其实挺简单的。

NodeJs 相关文章推荐
Nodejs极简入门教程(二):定时器
Oct 25 NodeJs
Nodejs 获取时间加手机标识的32位标识实现代码
Mar 07 NodeJs
详解nodejs微信公众号开发——1.接入微信公众号
Apr 10 NodeJs
nodejs入门教程一:概念与用法简介
Apr 24 NodeJs
详解Windows下安装Nodejs步骤
May 18 NodeJs
nodejs使用http模块发送get与post请求的方法示例
Jan 08 NodeJs
通过nodejs 服务器读取HTML文件渲染到页面的方法
May 17 NodeJs
NVM安装nodejs的方法实用步骤
Jan 16 NodeJs
nodejs中实现用户注册路由功能
May 20 NodeJs
Nodejs实现图片上传、压缩预览、定时删除功能
Oct 25 NodeJs
Nodejs技巧之Exceljs表格操作用法示例
Nov 06 NodeJs
nodejs制作小爬虫功能示例
Feb 24 NodeJs
nodejs教程之制作一个简单的文章发布系统
Nov 21 #NodeJs
nodejs教程之环境安装及运行
Nov 21 #NodeJs
nodejs教程之异步I/O
Nov 21 #NodeJs
nodejs教程之入门
Nov 21 #NodeJs
nodejs 提示‘xxx’ 不是内部或外部命令解决方法
Nov 20 #NodeJs
nodejs开发环境配置与使用
Nov 17 #NodeJs
Nodejs全栈框架StrongLoop推荐
Nov 09 #NodeJs
You might like
php中常用字符串处理代码片段整理
2011/11/07 PHP
PHP goto语句简介和使用实例
2014/03/11 PHP
PHP简单实现断点续传下载的方法
2015/09/25 PHP
Laravel中为什么不使用blpop取队列详析
2018/08/01 PHP
Jquery实战_读书笔记1—选择jQuery
2010/01/22 Javascript
js捕获鼠标右键菜单中的粘帖事件实现代码
2013/04/01 Javascript
用jquery统计子菜单的条数示例代码
2013/10/18 Javascript
javascript新建标签,判断键盘输入,以及判断焦点(示例代码)
2013/11/25 Javascript
jQuery随机密码生成的方法
2015/03/09 Javascript
js表单提交和submit提交的区别实例分析
2015/12/10 Javascript
浅析$.getJSON异步请求和同步请求
2016/06/06 Javascript
jquery+ajax+text文本框实现智能提示完整实例
2016/07/09 Javascript
jquery实现简单实用的轮播器
2017/05/23 jQuery
详解jQuery中的isPlainObject()使用方法
2018/02/27 jQuery
vue.js实现标签页切换效果
2018/06/07 Javascript
Vue项目中添加锁屏功能实现思路
2018/06/29 Javascript
详解mpvue中小程序自定义导航组件开发指南
2019/02/11 Javascript
纯javascript实现选择框的全选与反选功能
2019/04/08 Javascript
微信小程序通过js实现瀑布流布局详解
2019/08/28 Javascript
swiper实现异形轮播效果
2019/11/28 Javascript
Python实现3行代码解简单的一元一次方程
2014/08/18 Python
python字符串排序方法
2014/08/29 Python
在Python 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南
2018/01/30 Python
Python实现替换文件中指定内容的方法
2018/03/19 Python
numpy.linspace函数具体使用详解
2019/05/27 Python
Python占用的内存优化教程
2019/07/28 Python
关于HTML5+ API plusready的兼容问题
2020/11/20 HTML / CSS
路易威登和香奈儿手袋:LuxeDH
2017/01/12 全球购物
美国著名的女性内衣零售商:Frederick’s of Hollywood
2018/02/24 全球购物
施华洛世奇新加坡官网:SWAROVSKI新加坡
2020/10/06 全球购物
毕业生自荐书
2014/02/02 职场文书
2014年文艺部工作总结
2014/11/17 职场文书
公司岗位说明书
2015/10/08 职场文书
2016年小学生寒假家长评语
2015/10/10 职场文书
校运会班级霸气口号
2015/12/24 职场文书
2017公司年会主持人开幕词
2016/03/04 职场文书