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 相关文章推荐
抛弃Nginx使用nodejs做反向代理服务器
Jul 17 NodeJs
快速掌握Node.js之Window下配置NodeJs环境
Mar 21 NodeJs
nodejs+websocket实时聊天系统改进版
May 18 NodeJs
Nodejs 复制文件/文件夹的方法
Aug 24 NodeJs
Windows下使用Nodejs运行js的方法
Sep 02 NodeJs
nodejs 十六进制字符串型数据与btye型数据相互转换
Jul 30 NodeJs
Nodejs使用Mongodb存储与提供后端CRD服务详解
Sep 04 NodeJs
NodeJS 实现多语言的示例代码
Sep 11 NodeJs
nodejs中request库使用HTTPS代理的方法
Apr 30 NodeJs
nodejs中实现修改用户路由功能
May 24 NodeJs
nodejs实现获取本地文件夹下图片信息功能示例
Jun 22 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
探讨:使用XMLSerialize 序列化与反序列化
2013/06/08 PHP
php自定义函数转换html标签示例
2016/09/29 PHP
javascript显示选择目录对话框的代码
2008/11/10 Javascript
extjs form textfield的隐藏方法
2008/12/29 Javascript
JQuery.Ajax之错误调试帮助信息介绍
2013/07/04 Javascript
JS中的构造函数详细解析
2014/03/10 Javascript
js与css实现弹出层覆盖整个页面的方法
2014/12/13 Javascript
JavaScript实现ASC转汉字及汉字转ASC的方法
2016/01/23 Javascript
js+canvas绘制五角星的方法
2016/01/28 Javascript
jquery拖拽排序简单实现方法(效果增强版)
2016/02/16 Javascript
AngularJS基础 ng-list 指令详解及示例代码
2016/08/02 Javascript
JS给swf传参数的实现方法
2016/09/13 Javascript
AngularJS中$watch和$timeout的使用示例
2016/09/20 Javascript
原生JS改变透明度实现轮播效果
2017/03/24 Javascript
react native基于FlatList下拉刷新上拉加载实现代码示例
2018/09/30 Javascript
js 实现在2d平面上画8的方法
2018/10/10 Javascript
element el-input directive数字进行控制
2018/10/11 Javascript
Vue组件内部实现一个双向数据绑定的实例代码
2019/04/04 Javascript
Python threading多线程编程实例
2014/09/18 Python
Python中的Matplotlib模块入门教程
2015/04/15 Python
使用httplib模块来制作Python下HTTP客户端的方法
2015/06/19 Python
浅谈python中的面向对象和类的基本语法
2016/06/13 Python
请不要重复犯我在学习Python和Linux系统上的错误
2016/12/12 Python
python实现员工管理系统
2018/01/11 Python
Python在groupby分组后提取指定位置记录方法
2018/04/20 Python
python读取文本绘制动态速度曲线
2018/06/21 Python
pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法
2019/06/24 Python
HTML5中的Article和Section元素认识及使用
2013/03/22 HTML / CSS
GLAMGLOW香港官网:明星出镜前的秘密武器
2017/03/16 全球购物
AVI-8手表美国官方商店:AVI-8 USA
2019/04/10 全球购物
应届生高等护理求职信
2013/10/12 职场文书
早餐连锁店计划书
2014/01/08 职场文书
《世界多美呀》教学反思
2014/03/02 职场文书
乡文化站暑期培训方案
2014/08/28 职场文书
实体类或对象序列化时,忽略为空属性的操作
2021/06/30 Java/Android
javascript的setTimeout()使用方法总结
2021/11/20 Javascript