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 npm package.json中文文档
Sep 04 NodeJs
Nodejs学习笔记之Stream模块
Jan 13 NodeJs
nodejs加密Crypto的实例代码
Jul 07 NodeJs
NodeJS使用formidable实现文件上传
Oct 27 NodeJs
详解nodejs异步I/O和事件循环
Jun 07 NodeJs
深入浅析Nodejs的Http模块
Jun 20 NodeJs
nodejs 搭建简易服务器的图文教程(推荐)
Jul 18 NodeJs
nodejs操作mongodb的增删改查功能实例
Nov 09 NodeJs
windows系统下更新nodejs版本的方案
Nov 24 NodeJs
解决nodejs的npm命令无反应的问题
May 17 NodeJs
nodejs初始化init的示例代码
Oct 10 NodeJs
NodeJs入门教程之定时器和队列
Mar 08 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
增加反向链接的101个方法 站长推荐
2007/01/31 PHP
php session 检测和注销
2009/03/16 PHP
PHPMyadmin 配置文件详解(配置)
2009/12/03 PHP
用php实现的获取网页中的图片并保存到本地的代码
2010/01/05 PHP
php数组函数序列之each() - 获取数组当前内部指针所指向元素的键名和键值,并将指针移到下一位
2011/10/31 PHP
基于wordpress主题制作的具体实现步骤
2013/05/10 PHP
浅析PHP中Collection 类的设计
2013/06/21 PHP
加速IE的Javascript document输出的方法
2010/12/02 Javascript
基于jQuery的烟花效果(运动相关)点击屏幕出烟花
2012/06/14 Javascript
js导航菜单(自写)简单大方
2013/03/28 Javascript
ajaxFileUpload.js插件支持多文件上传的方法
2014/09/02 Javascript
jQuery实现的类似淘宝网站搜索框样式代码分享
2015/08/24 Javascript
js判断文本框输入的内容是否为数字
2015/12/23 Javascript
JavaScript数据结构与算法之链表
2016/01/29 Javascript
jQuery实现返回顶部功能
2016/02/23 Javascript
JavaScript的React Web库的理念剖析及基础上手指南
2016/05/10 Javascript
angularJS深拷贝详解
2017/03/23 Javascript
微信小程序后台解密用户数据实例详解
2017/06/28 Javascript
javaScript 连接打印机,打印小票的实例
2017/12/29 Javascript
利用JS代码自动删除稿件的普通弹幕功能
2019/09/20 Javascript
Node.js实现简单管理系统
2019/09/23 Javascript
Vue登录拦截 登录后继续跳转指定页面的操作
2020/08/04 Javascript
解决iView Table组件宽度只变大不变小的问题
2020/11/13 Javascript
学习python处理python编码问题
2011/03/13 Python
python实现端口转发器的方法
2015/03/13 Python
Python实现的拟合二元一次函数功能示例【基于scipy模块】
2018/05/15 Python
详解python中init方法和随机数方法
2019/03/13 Python
python面向对象实现名片管理系统文件版
2019/04/26 Python
Django框架视图层URL映射与反向解析实例分析
2019/07/29 Python
pycharm解决关闭flask后依旧可以访问服务的问题
2020/04/03 Python
Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
2020/05/11 Python
到底Java是如何传递参数的?是by value或by reference?
2012/07/13 面试题
水利学院求职自荐书
2014/02/01 职场文书
乡下人家教学反思
2014/02/01 职场文书
保护环境建议书400字
2014/05/13 职场文书
公司员工违法违章行为检讨书
2019/06/24 职场文书