nodejs URL模块操作URL相关方法介绍


Posted in NodeJs onMarch 03, 2015

url模块

处理HTTP请求时url模块使用率超高,因为该模块允许解析URL、生成URL,以及拼接URL。首先我们来看看一个完整的URL的各组成部分。

                         href

 -----------------------------------------------------------------

                            host              path

                      --------------- ----------------------------

 http: // user:pass @ host.com : 8080 /p/a/t/h ?query=string #hash

 -----    ---------   --------   ---- -------- ------------- -----

protocol     auth     hostname   port pathname     search     hash

                                                ------------

                                                   query

我们可以使用.parse方法来将一个URL字符串转换为URL对象,示例如下。
url.parse('http://user:pass@host.com:8080/p/a/t/h?query=string#hash');

/* =>

{ protocol: 'http:',

  auth: 'user:pass',

  host: 'host.com:8080',

  port: '8080',

  hostname: 'host.com',

  hash: '#hash',

  search: '?query=string',

  query: 'query=string',

  pathname: '/p/a/t/h',

  path: '/p/a/t/h?query=string',

  href: 'http://user:pass@host.com:8080/p/a/t/h?query=string#hash' }

*/

传给.parse方法的不一定要是一个完整的URL,例如在HTTP服务器回调函数中,request.url不包含协议头和域名,但同样可以用.parse方法解析。
http.createServer(function (request, response) {

    var tmp = request.url; // => "/foo/bar?a=b"

    url.parse(tmp);

    /* =>

    { protocol: null,

      slashes: null,

      auth: null,

      host: null,

      port: null,

      hostname: null,

      hash: null,

      search: '?a=b',

      query: 'a=b',

      pathname: '/foo/bar',

      path: '/foo/bar?a=b',

      href: '/foo/bar?a=b' }

    */

}).listen(80);

.parse方法还支持第二个和第三个布尔类型可选参数。第二个参数等于true时,该方法返回的URL对象中,query字段不再是一个字符串,而是一个经过querystring模块转换后的参数对象。第三个参数等于true时,该方法可以正确解析不带协议头的URL,例如//www.example.com/foo/bar。

反过来,format方法允许将一个URL对象转换为URL字符串,示例如下。

url.format({

    protocol: 'http:',

    host: 'www.example.com',

    pathname: '/p/a/t/h',

    search: 'query=string'

});

/* =>

'http://www.example.com/p/a/t/h?query=string'

*/

另外,.resolve方法可以用于拼接URL,示例如下。
url.resolve('http://www.example.com/foo/bar', '../baz');

/* =>

 

http://www.example.com/baz

 

*/

Query String

querystring模块用于实现URL参数字符串与参数对象的互相转换,示例如下。

querystring.parse('foo=bar&baz=qux&baz=quux&corge');

/* =>

{ foo: 'bar', baz: ['qux', 'quux'], corge: '' }

*/

 

querystring.stringify({ foo: 'bar', baz: ['qux', 'quux'], corge: '' });

/* =>

'foo=bar&baz=qux&baz=quux&corge='

*/
NodeJs 相关文章推荐
NodeJS Web应用监听sock文件实例
Feb 18 NodeJs
nodeJs内存泄漏问题详解
Sep 05 NodeJs
nodejs入门教程五:连接数据库的方法分析
Apr 24 NodeJs
NodeJS自定义模块写法(详解)
Jun 27 NodeJs
nodejs后台集成ueditor富文本编辑器的实例
Jul 11 NodeJs
nodejs实现OAuth2.0授权服务认证
Dec 27 NodeJs
Nodejs连接mysql并实现增、删、改、查操作的方法详解
Jan 04 NodeJs
Nodejs Express 通过log4js写日志到Logstash(ELK)
Aug 30 NodeJs
手把手教你如何使用nodejs编写cli命令行
Nov 05 NodeJs
nodejs异步编程基础之回调函数用法分析
Dec 26 NodeJs
nodejs微信开发之自动回复的实现
Mar 17 NodeJs
Nodejs环境实现socket通信过程解析
Jul 03 NodeJs
Windows系统中安装nodejs图文教程
Feb 28 #NodeJs
NodeJS中利用Promise来封装异步函数
Feb 25 #NodeJs
NodeJS Web应用监听sock文件实例
Feb 18 #NodeJs
NodeJS使用jQuery选择器操作DOM
Feb 13 #NodeJs
NodeJs基本语法和类型
Feb 13 #NodeJs
nodejs事件的监听与触发的理解分析
Feb 12 #NodeJs
nodejs 整合kindEditor实现图片上传
Feb 03 #NodeJs
You might like
PHP中计算字符串相似度的函数代码
2012/12/29 PHP
解决FastCGI 进程超过了配置的活动超时时限的问题
2013/07/03 PHP
3款值得推荐的微信开发开源框架
2014/10/28 PHP
PHP中的Streams详细介绍
2014/11/12 PHP
CodeIgniter常用知识点小结
2016/05/26 PHP
[企业公众号]升级到[企业微信]之后发送消息失败的解决方法
2017/06/30 PHP
PHP实现提取多维数组指定一列的方法总结
2019/12/04 PHP
google jQuery 引用文件,jQuery 引用地址集合(jquery 1.2.6至jquery1.5.2)
2011/04/24 Javascript
JavaScript之Getters和Setters 平台支持等详细介绍
2012/12/07 Javascript
jquery的$getjson调用并获取远程的JSON字符串问题
2012/12/10 Javascript
js生成缩略图后上传并利用canvas重绘
2014/05/15 Javascript
javascript从image转换为base64位编码的String
2014/07/29 Javascript
jquery bind(click)传参让列表中每行绑定一个事件
2014/08/06 Javascript
javascript匀速运动实现方法分析
2016/01/08 Javascript
JavaScript中数组添加值和访问值常见问题
2016/02/06 Javascript
详解AngularJS过滤器的使用
2016/03/11 Javascript
利用jquery实现验证输入的是否是数字、小数,包含保留几位小数
2016/12/07 Javascript
详解javascript获取url信息的常见方法
2016/12/19 Javascript
webpack独立打包和缓存处理详解
2017/04/03 Javascript
Vue中的transition封装组件的实现方法
2019/08/13 Javascript
vue路由拦截器和请求拦截器知识点总结
2019/11/08 Javascript
vue 解决IOS10低版本白屏的问题
2020/11/17 Javascript
python实现斐波那契递归函数的方法
2014/09/08 Python
详解在Python的Django框架中创建模板库的方法
2015/07/20 Python
用python实现对比两张图片的不同
2018/02/05 Python
Python获取指定字符前面的所有字符方法
2018/05/02 Python
python机器人运动范围问题的解答
2019/04/29 Python
基于Django框架的权限组件rbac实例讲解
2019/08/31 Python
python判断元素是否存在的实例方法
2020/09/24 Python
python中strip(),lstrip(),rstrip()函数的使用讲解
2020/11/17 Python
一套带网友答案的.NET笔试题
2016/12/06 面试题
法警的竞聘演讲稿
2014/01/02 职场文书
安全标准化实施方案
2014/02/20 职场文书
国际贸易专业自荐信
2014/06/10 职场文书
MySQL下使用Inplace和Online方式创建索引的教程
2021/05/26 MySQL
vue+springboot实现登录验证码
2021/05/27 Vue.js