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 相关文章推荐
jquery中获取元素的几种方式小结
Jul 05 Javascript
jQuery选择器全面总结
Jan 06 Javascript
js函数参数设置默认值的一种变通实现方法
May 26 Javascript
jquery ui bootstrap 实现自定义风格
Nov 14 Javascript
JavaScript函数的一些注意要点小结及js匿名函数
Nov 10 Javascript
整理Javascript基础入门学习笔记
Nov 29 Javascript
javascript原型继承工作原理和实例详解
Apr 07 Javascript
JS实现的tab切换选项卡效果示例
Feb 28 Javascript
vue.js路由跳转详解
Aug 28 Javascript
MUI顶部选项卡的用法(tab-top-webview-main)详解
Oct 08 Javascript
webpack 代码分离优化快速指北
May 18 Javascript
JavaScript canvas绘制渐变颜色的矩形
Feb 18 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音乐采集(部分代码)
2007/02/14 PHP
探讨fckeditor在Php中的配置详解
2013/06/08 PHP
基于GD2图形库的PHP生成图片缩略图类代码分享
2015/02/08 PHP
typecho插件编写教程(一):Hello World
2015/05/28 PHP
详解PHP中的8个魔术常量
2020/07/06 PHP
JQuery验证工具类搜集整理
2013/01/16 Javascript
js有序数组的连接问题
2013/10/01 Javascript
jquery计算鼠标和指定元素之间距离的方法
2015/06/26 Javascript
javascript实现无缝上下滚动特效
2015/12/16 Javascript
jqueryMobile使用示例分享
2016/01/12 Javascript
javascript实现数字倒计时特效
2016/03/30 Javascript
javascript中href和replace的比较(详解)
2016/11/25 Javascript
backbone简介_动力节点Java学院整理
2017/07/14 Javascript
js微信分享实现代码
2020/10/11 Javascript
vue中vee validate表单校验的几种基本使用
2018/06/25 Javascript
微信小程序 如何获取网络状态
2019/07/26 Javascript
JavaScript undefined及null区别实例解析
2020/07/21 Javascript
[00:32]2018DOTA2亚洲邀请赛Liquid出场
2018/04/03 DOTA
基于python编写的微博应用
2014/10/17 Python
Python RuntimeError: thread.__init__() not called解决方法
2015/04/28 Python
Pycharm学习教程(1) 定制外观
2017/05/02 Python
python使用itchat库实现微信机器人(好友聊天、群聊天)
2018/01/04 Python
pandas使用get_dummies进行one-hot编码的方法
2018/07/10 Python
pandas分别写入excel的不同sheet方法
2018/12/11 Python
Python JSON格式数据的提取和保存的实现
2019/03/22 Python
手写一个python迭代器过程详解
2019/08/27 Python
Pandas DataFrame中的tuple元素遍历的实现
2019/10/23 Python
Python自定义聚合函数merge与transform区别详解
2020/05/26 Python
教师师德教育的自我评价
2013/10/31 职场文书
主题酒店策划书
2014/01/28 职场文书
2014年学校党建工作汇报材料
2014/11/02 职场文书
大学生个人学习总结
2015/02/15 职场文书
2015秋季小学开学寄语
2015/05/27 职场文书
培训计划通知
2015/07/15 职场文书
2016北大自主招生自荐信模板
2016/01/28 职场文书
利用Selenium添加cookie实现自动登录的示例代码(fofa)
2021/05/08 Python