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异步编程
Dec 04 NodeJs
NodeJS的Promise的用法解析
May 05 NodeJs
nodeJs内存泄漏问题详解
Sep 05 NodeJs
NodeJS测试框架mocha入门教程
Mar 28 NodeJs
nodejs构建本地web测试服务器 如何解决访问静态资源问题
Jul 14 NodeJs
nodejs实现OAuth2.0授权服务认证
Dec 27 NodeJs
nodejs爬虫初试superagent和cheerio
Mar 05 NodeJs
修改Nodejs内置的npm默认配置路径方法
May 13 NodeJs
解决Nodejs全局安装模块后找不到命令的问题
May 15 NodeJs
Nodejs异步流程框架async的方法
Jun 07 NodeJs
nodejs环境使用Typeorm连接查询Oracle数据
Dec 05 NodeJs
Nodejs + Websocket 指定发送及群聊的实现
Jan 09 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实现的轻量级简单爬虫
2015/07/08 PHP
php实现批量上传数据到数据库(.csv格式)的案例
2017/06/18 PHP
JavaScript Archive Network 集合
2007/05/12 Javascript
jquery 利用show和hidden实现级联菜单示例代码
2013/08/09 Javascript
javascript中typeof的使用示例
2013/12/19 Javascript
使用ajax+jqtransform实现动态加载select
2014/12/01 Javascript
jQuery插件slides实现无缝轮播图特效
2015/04/17 Javascript
详解JavaScript的Date对象(制作简易钟表)
2020/04/07 Javascript
点击按钮出现60秒倒计时的简单js代码(推荐)
2016/06/07 Javascript
js基础之DOM中document对象的常用属性方法详解
2016/10/28 Javascript
微信小程序 开发之顶部导航栏实例代码
2017/02/23 Javascript
详解关于微信setData回调函数中的坑
2019/02/18 Javascript
微信小程序实现获取准确的腾讯定位地址功能示例
2019/03/27 Javascript
vue自定义指令限制输入框输入值的步骤与完整代码
2020/08/30 Javascript
[01:07:11]Secret vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
简介Python的collections模块中defaultdict类型的用法
2016/07/07 Python
Python实现读取字符串按列分配后按行输出示例
2018/04/17 Python
Python 输入一个数字判断成绩分数等级的方法
2018/11/15 Python
用Python编写一个高效的端口扫描器的方法
2018/12/20 Python
python 实现生成均匀分布的点
2019/12/05 Python
Python threading.local代码实例及原理解析
2020/03/16 Python
如何用 Python 制作一个迷宫游戏
2021/02/25 Python
canvas三角函数模拟水波效果的示例代码
2018/07/03 HTML / CSS
html5 canvas绘制矩形和圆形的实例代码
2016/06/16 HTML / CSS
澳大利亚领先的女性运动服品牌:Lorna Jane
2020/06/19 全球购物
如何理解transaction事务的概念
2015/05/27 面试题
电厂厂长岗位职责
2014/01/02 职场文书
好家长事迹材料
2014/01/23 职场文书
电脑专业个人求职信范文
2014/02/04 职场文书
税务会计岗位职责
2014/02/18 职场文书
初一新生军训方案
2014/05/22 职场文书
幼儿园教师读书笔记
2015/06/29 职场文书
应届生个人的求职(自荐信范文2篇)
2019/08/23 职场文书
浅谈MySQL之浅入深出页原理
2021/06/23 MySQL
解决使用了nginx获取IP地址都是127.0.0.1 的问题
2021/09/25 Servers
AJAX引擎原理以及XmlHttpRequest对象的axios、fetch区别详解
2022/04/09 Javascript