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 Web应用监听sock文件实例
Feb 18 NodeJs
nodejs URL模块操作URL相关方法介绍
Mar 03 NodeJs
nodejs简单实现中英文翻译
May 04 NodeJs
浅谈Nodejs观察者模式
Oct 13 NodeJs
nodejs初步体验篇
Nov 23 NodeJs
Nodejs中session的简单使用及通过session实现身份验证的方法
Feb 04 NodeJs
NodeJS远程代码执行
Aug 28 NodeJs
NodeJS和BootStrap分页效果的实现代码
Nov 07 NodeJs
Nodejs进阶:如何将图片转成datauri嵌入到网页中去实例
Nov 21 NodeJs
nodejs读写json文件的简单方法(必看)
Mar 09 NodeJs
angular2+nodejs实现图片上传功能
Mar 27 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
一实用的实现table排序的Javascript类库
2007/09/12 Javascript
js apply/call/caller/callee/bind使用方法与区别分析
2009/10/28 Javascript
JavaScript转换农历类实现及调用方法
2013/01/27 Javascript
JS 对输入框进行限制(常用的都有)
2013/07/30 Javascript
JS将表单导出成EXCEL的实例代码
2013/11/11 Javascript
a标签的href与onclick事件的区别详解
2014/11/12 Javascript
创建你的第一个AngularJS应用的方法
2015/06/16 Javascript
js实现类似菜单风格的TAB选项卡效果代码
2015/08/28 Javascript
基于jQuery实现的菜单切换效果
2015/10/16 Javascript
Bootstrap每天必学之日期控制
2016/03/07 Javascript
详解基于webpack2.x的vue2.x的多页面站点
2017/08/21 Javascript
Javascript防止图片拉伸的自适应处理方法
2017/12/26 Javascript
浅谈react-router HashRouter和BrowserRouter的使用
2017/12/29 Javascript
JavaScript实现预览本地上传图片功能完整示例
2019/03/08 Javascript
微信小程序遍历Echarts图表实现多个饼图
2019/04/25 Javascript
JS实现动态添加外部js、css到head标签的方法
2019/06/05 Javascript
详解微信小程序图片地扯转base64解决方案
2019/08/18 Javascript
从0搭建vue-cli4脚手架
2020/06/17 Javascript
[03:17]DOTA2英雄基础教程 剧毒术士
2013/12/12 DOTA
Python 模拟员工信息数据库操作的实例
2017/10/23 Python
PyQt5每天必学之事件与信号
2018/04/20 Python
数组保存为txt, npy, csv 文件, 数组遍历enumerate的方法
2018/07/09 Python
python绘制双Y轴折线图以及单Y轴双变量柱状图的实例
2019/07/08 Python
python中数据库like模糊查询方式
2020/03/02 Python
10个python3常用排序算法详细说明与实例(快速排序,冒泡排序,桶排序,基数排序,堆排序,希尔排序,归并排序,计数排序)
2020/03/17 Python
python用Configobj模块读取配置文件
2020/09/26 Python
Python+OpenCV检测灯光亮点的实现方法
2020/11/02 Python
Pandora西班牙官方商店:PandoraShop.es
2020/10/05 全球购物
父亲的菜园教学反思
2014/02/13 职场文书
环保倡议书500字
2014/05/15 职场文书
亮剑观后感600字
2015/06/05 职场文书
2016猴年春节问候语
2015/11/11 职场文书
关于社会实践的心得体会(2016最新版)
2016/01/25 职场文书
详解Go语言运用广度优先搜索走迷宫
2021/06/23 Python
一文了解MYSQL三大范式和表约束
2022/04/03 MySQL
Win11怎么添加用户?Win11添加用户账户的方法
2022/07/15 数码科技