Node.js学习之地址解析模块URL的使用详解


Posted in Javascript onSeptember 28, 2017

前言

本文主要给大家介绍了关于Node.js地址解析模块URL使用的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

url结构化/模块化/路径解析

  • 结构化:url.parse(urlString[, parseQueryString[, slashesDenoteHost]])
  • 模块化:url.format(urlObject)
  • 路径解析:url.resolve(from, to)

一个URL字符串是一个结构化的字符串包含多个有意义的组件。在解析时,返回一个URL对象包含每一个组件的属性。

官方手册上面的一张图是这样子的:

Node.js学习之地址解析模块URL的使用详解

这张图解释了一个url结构化成哪些部分,哪些部分又包含哪些部分

protocol: 请求协议

host: URL主机名已全部转换成小写, 包括端口信息

auth:URL中身份验证信息部分

hostname:主机的主机名部分, 已转换成小写

port: 主机的端口号部分

pathname: URL的路径部分,位于主机名之后请求查询之前

search: URL 的“查询字符串”部分,包括开头的问号。

path: pathname 和 search 连在一起。

query: 查询字符串中的参数部分(问号后面部分字符串),或者使用 querystring.parse() 解析后返回的对象。

hash: URL 的 “#” 后面部分(包括 # 符号)

url结构化

将一个url地址结构化成为拥有上图属性的url对象。url.parse第二个和第三个参数默认为false。

  • 第二个参数决定query属性值是字符串还是对象
  • 第三个参数如果为true,//后的第一个令牌文字字符串和下一个/之间的文字字符串将被解释为主机

例子如下

const url = require("url");
var urlstr = "http://localhost:8888/bb?name=bigbear&memo=helloworld&memo=helloC";
var urlobj = url.parse(urlstr); 
console.log(urlobj);
/*
Url {
 protocol: 'http:',
 slashes: true,
 auth: null,
 host: 'localhost:8888',
 port: '8888',
 hostname: 'localhost',
 hash: null,
 search: '?name=bigbear&memo=helloworld&memo=helloC',
 query: 'name=bigbear&memo=helloworld&memo=helloC',
 pathname: '/bb',
 path: '/bb?name=bigbear&memo=helloworld&memo=helloC',
 href: 'http://localhost:8888/bb?name=bigbear&memo=helloworld&memo=helloC' }
*/

第二个参数为true时

query: { name: ‘bigbear', memo: [ ‘helloworld', ‘helloC' ] },

例子如下:

const url = require("url");
var urlstr = "http://localhost:8888/bb?name=bigbear&memo=helloworld&memo=helloC";
console.log(
 url.parse(urlstr, true)
)
/*
Url {
 protocol: 'http:',
 slashes: true,
 auth: null,
 host: 'localhost:8888',
 port: '8888',
 hostname: 'localhost',
 hash: null,
 search: '?name=bigbear&memo=helloworld&memo=helloC',
 query: { name: 'bigbear', memo: [ 'helloworld', 'helloC' ] },
 pathname: '/bb',
 path: '/bb?name=bigbear&memo=helloworld&memo=helloC',
 href: 'http://localhost:8888/bb?name=bigbear&memo=helloworld&memo=helloC' }
*/

第三个参数对比

例子如下:

const url = require("url");
var urlstr = "//foo/bar ";
console.log(
 url.parse(urlstr, true,true)
)
/*
 输出:Url {
 protocol: null,
 slashes: true,
 auth: null,
 host: 'foo',
 port: null,
 hostname: 'foo',
 hash: null,
 search: '',
 query: {},
 pathname: '/bar',
 path: '/bar',
 href: '//foo/bar' }
*/


const url = require("url");
var urlstr = "//foo/bar ";
console.log(
 url.parse(urlstr)
)
/*
输出:
Url {
 protocol: null,
 slashes: null,
 auth: null,
 host: null,
 port: null,
 hostname: null,
 hash: null,
 search: null,
 query: null,
 pathname: '//foo/bar',
 path: '//foo/bar',
 href: '//foo/bar' }
*/

url模块化

将一个url对象转换成一个url字符串,url对象中的属性为url.parse()产生的对象的属性。

url.parse()url.format()互为逆操作。

例子如下:

const url = require("url");
var Urlobj = {
 protocol: 'http:',
 slashes: true,
 auth: null,
 host: 'localhost:8888',
 port: '8888',
 hostname: 'localhost',
 hash: null,
 search: '?name=bigbear&memo=helloworld&memo=helloC',
 query: { name: 'bigbear', memo: [ 'helloworld', 'helloC' ] },
 pathname: '/bb',
 path: '/bb?name=bigbear&memo=helloworld&memo=helloC',
 }
console.log(
 url.format(Urlobj)
)
//输出:http://localhost:8888/bb?name=bigbear&memo=helloworld&memo=helloC

路径解析:url.resolve(from, to)

url.resolve()方法解决了目标URL相对于基本URL的方式类似于Web浏览器解决锚标记href。

官方手册例子:

url.resolve('/one/two/three', 'four');  
// '/one/two/four'

url.resolve('http://example.com/', '/one'); 
// 'http://example.com/one'

url.resolve('http://example.com/one', '/two'); 
// 'http://example.com/two'

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
利用jq让你的div居中的好方法分享
Nov 21 Javascript
利用js实现在浏览器状态栏显示访问者在本页停留的时间
Dec 29 Javascript
jQuery实现ichat在线客服插件
Dec 29 Javascript
javascript实现手机震动API代码
Aug 05 Javascript
浏览器兼容的JS写法总结
Apr 27 Javascript
设置点击文本框或图片弹出日历控件的实现代码
May 12 Javascript
js仿微信公众平台打标签功能
Apr 08 Javascript
js模拟百度模糊搜索的实例
Aug 04 Javascript
react中的ajax封装实例详解
Oct 17 Javascript
微信小程序使用radio显示单选项功能【附源码下载】
Dec 11 Javascript
JavaScript ES2019中的8个新特性详解
Feb 20 Javascript
使用xampp将angular项目运行在web服务器的教程
Sep 16 Javascript
javascript基于牛顿迭代法实现求浮点数的平方根【递归原理】
Sep 28 #Javascript
React Native模块之Permissions权限申请的实例相机
Sep 28 #Javascript
Node.js学习之查询字符串解析querystring详解
Sep 28 #Javascript
angular4自定义组件详解
Sep 28 #Javascript
详解Vue路由History mode模式中页面无法渲染的原因及解决
Sep 28 #Javascript
Node.js利用断言模块assert进行单元测试的方法
Sep 28 #Javascript
详解基于vue-router的动态权限控制实现方案
Sep 28 #Javascript
You might like
php与XML、XSLT、Mysql的结合运用实现代码
2009/11/19 PHP
PHP实现域名whois查询的代码(数据源万网、新网)
2010/02/22 PHP
探讨:如何使用PHP实现计算两个日期间隔的年、月、周、日数
2013/06/13 PHP
PHP设置图片文件上传大小的具体实现方法
2013/10/11 PHP
php+ajax 文件上传代码实例
2019/03/18 PHP
URL编码转换,escape() encodeURI() encodeURIComponent()
2006/12/27 Javascript
(推荐一个超好的JS函数库)S.Sams Lifexperience ScriptClassLib
2007/04/29 Javascript
用javascript实现给图片加链接
2007/08/15 Javascript
深入认识javascript中的eval函数
2009/11/02 Javascript
基于jQuery的Tab选项框效果代码(插件)
2011/03/01 Javascript
js获取select标签选中值的两种方式
2014/01/09 Javascript
jquery实现的缩略图预览滑块实例
2015/06/25 Javascript
jQuery实现Flash效果上下翻动的中英文导航菜单代码
2015/09/22 Javascript
原生js实现图片轮播特效
2015/12/18 Javascript
jquery dialog获取焦点的方法
2017/02/09 Javascript
使用Python内置的模块与函数进行不同进制的数的转换
2016/03/12 Python
Python定义一个跨越多行的字符串的多种方法小结
2018/07/19 Python
Python制作词云图代码实例
2019/09/09 Python
python getpass实现密文实例详解
2019/09/24 Python
python接口自动化如何封装获取常量的类
2019/12/24 Python
python列表切片和嵌套列表取值操作详解
2020/02/27 Python
Django ORM filter() 的运用详解
2020/05/14 Python
浅谈opencv自动光学检测、目标分割和检测(连通区域和findContours)
2020/06/04 Python
matplotlib之多边形选区(PolygonSelector)的使用
2021/02/24 Python
Pytorch - TORCH.NN.INIT 参数初始化的操作
2021/02/27 Python
快速实现一个简单的canvas迷宫游戏的示例
2018/07/04 HTML / CSS
美国最好的钓鱼、狩猎和划船装备商店:Bass Pro Shops
2018/12/02 全球购物
MyHeritage美国:家族史研究和DNA测试的领先服务
2019/05/27 全球购物
地理科学专业毕业生求职信
2013/10/15 职场文书
药学专业大学生个人的自我评价
2013/11/04 职场文书
酒店中秋节活动方案
2014/01/31 职场文书
派出所所长先进事迹
2014/05/19 职场文书
学习型党组织建设经验材料
2014/05/26 职场文书
教师党员个人剖析材料
2014/09/29 职场文书
教学督导岗位职责
2015/04/10 职场文书
Python Numpy之linspace用法说明
2021/04/17 Python