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实现的一个简单udp广播服务器、客户端
Sep 25 NodeJs
NodeJS的Promise的用法解析
May 05 NodeJs
NodeJS配置HTTPS服务实例分享
Feb 19 NodeJs
nodejs获取微信小程序带参数二维码实现代码
Apr 12 NodeJs
nodejs模块学习之connect解析
Jul 05 NodeJs
详解NODEJS的http实现
Jan 04 NodeJs
Linux Centos7.2下安装nodejs&npm配置全局路径的教程
May 15 NodeJs
nodejs aes 加解密实例
Oct 10 NodeJs
NVM安装nodejs的方法实用步骤
Jan 16 NodeJs
独立部署小程序基于nodejs的服务器过程详解
Jun 24 NodeJs
Nodejs中使用puppeteer控制浏览器中视频播放功能
Aug 26 NodeJs
使用 Koa + TS + ESLlint 搭建node服务器的过程详解
May 30 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
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
PHP实现多图上传和单图上传功能
2018/05/17 PHP
Use Word to Search for Files
2007/06/15 Javascript
基于jquery的时间段实现代码
2012/08/02 Javascript
浅谈javascript 归并方法
2015/01/21 Javascript
JavaScript和JQuery的鼠标mouse事件冒泡处理
2015/06/19 Javascript
跟我学习javascript的闭包
2015/11/16 Javascript
当jquery ajax遇上401请求的解决方法
2016/05/19 Javascript
Mongoose实现虚拟字段查询的方法详解
2017/08/15 Javascript
webpack搭建vue 项目的步骤
2017/12/27 Javascript
react-native封装插件swiper的使用方法
2018/03/20 Javascript
vuex直接赋值的三种方法总结
2018/09/16 Javascript
js中位数不足自动补位扩展padLeft、padRight实现代码
2020/04/06 Javascript
JS倒计时两种实现方式代码实例
2020/07/27 Javascript
vue addRoutes路由动态加载操作
2020/08/04 Javascript
[01:20]2018DOTA2亚洲邀请赛总决赛战队LGD晋级之路
2018/04/07 DOTA
[01:06:18]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第二场 1月26日
2021/03/11 DOTA
python连接池实现示例程序
2013/11/26 Python
使用Python的Flask框架实现视频的流媒体传输
2015/03/31 Python
Python字符串匹配算法KMP实例
2015/07/18 Python
python itchat实现微信自动回复的示例代码
2017/08/14 Python
Python实现将通信达.day文件读取为DataFrame
2018/12/22 Python
Scrapy框架爬取西刺代理网免费高匿代理的实现代码
2019/02/22 Python
python爬取盘搜的有效链接实现代码
2019/07/20 Python
Django使用中间键实现csrf认证详解
2019/07/22 Python
python中关于数据类型的学习笔记
2020/07/19 Python
Python爬虫新手入门之初学lxml库
2020/12/20 Python
Spotahome意大利:公寓和房间出租
2020/02/21 全球购物
日本最大的彩色隐形眼镜销售网站:CharmColor
2020/09/09 全球购物
计算机大学生的自我评价
2013/10/15 职场文书
社区端午节活动方案
2014/01/28 职场文书
小班重阳节活动方案
2014/02/08 职场文书
小学教师个人先进事迹材料
2014/05/17 职场文书
2014年员工工作总结范文
2014/11/18 职场文书
中国现代文学之经典散文三篇
2019/09/18 职场文书
Pillow图像处理库安装及使用
2022/04/12 Python