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 相关文章推荐
js 实现日期灵活格式化的小例子
Jul 14 Javascript
js调用iframe实现打印页面内容的方法
Mar 04 Javascript
escape编码与unescape解码汉字出现乱码的解决方法
Jul 02 Javascript
解析javascript中鼠标滚轮事件
May 26 Javascript
AngularJS之自定义服务详解(factory、service、provider)
Apr 14 Javascript
使用vue框架 Ajax获取数据列表并用BootStrap显示出来
Apr 24 Javascript
详解利用jsx写vue组件的方法示例
Jul 17 Javascript
vue后台管理之动态加载路由的方法
Aug 13 Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
Feb 22 Javascript
泛谈JS逻辑判断选择器 || &&
May 24 Javascript
Vue.js组件使用props传递数据的方法
Oct 19 Javascript
js计时事件实现圆形时钟
Mar 25 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仿ZOL分页类代码
2008/10/02 PHP
在Nginx上部署ThinkPHP项目教程
2015/02/02 PHP
php文件下载处理方法分析
2015/04/22 PHP
php检测mysql表是否存在的方法小结
2017/07/20 PHP
PHP XML Expat解析器知识点总结
2019/02/15 PHP
[JS]点出统计器
2020/10/11 Javascript
写出更好的JavaScript之undefined篇(上)
2009/11/22 Javascript
javascript 实现子父窗体互相传值的简单实例
2014/02/17 Javascript
纯js实现遮罩层效果原理分析
2014/05/27 Javascript
JS+CSS实现类似QQ好友及黑名单效果的树型菜单
2015/09/22 Javascript
BootStrap智能表单实战系列(十一)级联下拉的支持
2016/06/13 Javascript
js判断数组key是否存在(不用循环)的简单实例
2016/08/03 Javascript
深入理解JavaScript中的块级作用域、私有变量与模块模式
2016/10/31 Javascript
详解vue-cli开发环境跨域问题解决方案
2017/06/06 Javascript
JavaScript仿微信(电话)联系人列表滑动字母索引实例讲解(推荐)
2017/08/16 Javascript
vue路由跳转时判断用户是否登录功能的实现
2017/10/26 Javascript
vue实现nav导航栏的方法
2017/12/13 Javascript
vue通过点击事件读取音频文件的方法
2018/05/30 Javascript
微信小程序云开发如何实现数据库自动备份实现
2019/08/16 Javascript
JavaScript制作3D旋转相册
2020/08/02 Javascript
VUE.CLI4.0配置多页面入口的实现
2019/11/25 Javascript
Node.js设置定时任务之node-schedule模块的使用详解
2020/04/28 Javascript
vant-ui框架的一个bug(解决切换后onload不触发)
2020/11/11 Javascript
python通过colorama模块在控制台输出彩色文字的方法
2015/03/19 Python
python实现在多维数组中挑选符合条件的全部元素
2019/11/26 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
2020/03/18 Python
Python操作Jira库常用方法解析
2020/04/10 Python
python+opencv3.4.0 实现HOG+SVM行人检测的示例代码
2021/01/28 Python
Groupon比利时官方网站:特卖和网上购物高达-70%
2019/08/09 全球购物
最受欢迎的自我评价
2013/12/22 职场文书
面试后的英文感谢信
2014/02/01 职场文书
致铅球运动员加油稿
2014/02/13 职场文书
基督教婚礼主持词
2014/03/14 职场文书
2014年物业公司工作总结
2014/11/22 职场文书
护士先进个人总结
2015/02/13 职场文书
2015年度绩效考核工作总结
2015/05/27 职场文书