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简单实现中英文翻译
May 04 NodeJs
浅谈Nodejs中的作用域问题
Dec 26 NodeJs
nodeJs链接Mysql做增删改查的简单操作
Feb 04 NodeJs
nodejs入门教程五:连接数据库的方法分析
Apr 24 NodeJs
nodejs操作mysql实现增删改查的实例
May 28 NodeJs
详解nodejs中express搭建权限管理系统
Sep 15 NodeJs
nodejs acl的用户权限管理详解
Mar 14 NodeJs
NodeJS父进程与子进程资源共享原理与实现方法
Mar 16 NodeJs
nodejs遍历文件夹下并操作HTML/CSS/JS/PNG/JPG的方法
Nov 01 NodeJs
nodejs图片处理工具gm用法小结
Dec 12 NodeJs
通过实例了解Nodejs模块系统及require机制
Jul 16 NodeJs
一文秒懂nodejs中的异步编程
Jan 28 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&&mysql)五
2006/10/09 PHP
PHP操作文件方法问答
2007/03/16 PHP
基于php冒泡排序算法的深入理解
2013/06/09 PHP
php实现图片缩放功能类
2013/12/18 PHP
PHP未登录自动跳转到登录页面
2016/12/21 PHP
php curl 模拟登录并获取数据实例详解
2016/12/22 PHP
php数据结构之顺序链表与链式线性表示例
2018/01/22 PHP
php获取用户真实IP和防刷机制的实例代码
2018/11/28 PHP
laravel5.1框架基础之Blade模板继承简单使用方法分析
2019/09/05 PHP
28个JS验证函数收集
2010/03/02 Javascript
xheditor与validate插件冲突的解决方案
2010/04/15 Javascript
jQuery实现的立体文字渐变效果
2010/05/17 Javascript
jquery submit ie6下失效的原因分析及解决方法
2013/11/15 Javascript
JQUERY 设置SELECT选中项代码
2014/02/07 Javascript
javascript中通过arguments参数伪装方法重载
2014/10/08 Javascript
jQuery插件slicebox实现3D动画图片轮播切换特效
2015/04/12 Javascript
完美解决IE9浏览器出现的对象未定义问题
2016/09/29 Javascript
vuex 的简单使用
2018/03/22 Javascript
Vue 菜单栏点击切换单个class(高亮)的方法
2018/08/22 Javascript
jQuery控制input只能输入数字和两位小数的方法
2019/05/16 jQuery
vue实现移动端返回顶部
2020/10/12 Javascript
[01:03:42]VP vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
简单文件操作python 修改文件指定行的方法
2013/05/15 Python
python中is与双等于号“==”的区别示例详解
2017/11/21 Python
python代码实现ID3决策树算法
2017/12/20 Python
python中判断文件编码的chardet(实例讲解)
2017/12/21 Python
TensorFLow 不同大小图片的TFrecords存取实例
2020/01/20 Python
Python smtp邮件发送模块用法教程
2020/06/15 Python
CSS3中的5个有趣的新技术
2009/04/02 HTML / CSS
美国购买肉、鸭、家禽、鹅肝和熟食网站:D’Artagnan
2018/11/13 全球购物
嘻哈珠宝品牌:KRKC&CO
2020/10/19 全球购物
房产代理公证处委托书
2014/04/04 职场文书
小学生演讲稿大全
2014/04/25 职场文书
法制宣传月活动总结
2014/04/29 职场文书
项目负责人岗位职责
2015/02/15 职场文书
总经理2015中秋节致辞
2015/07/29 职场文书