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 相关文章推荐
用javascript实现无刷新更新数据的详细步骤 asp
Dec 26 Javascript
了解jQuery技巧来提高你的代码(个人觉得那个jquery的手册很不错)
Feb 10 Javascript
javascript学习(一)构建自己的JS库
Jan 02 Javascript
jquery 面包屑导航 具体实现
Jun 05 Javascript
javascript比较两个日期相差天数的方法
Jul 24 Javascript
快速解决js中window.location.href不工作的问题
Nov 02 Javascript
一篇文章让你彻底弄懂JS的事件冒泡和事件捕获
Aug 14 Javascript
ng-repeat指令在迭代对象时的去重方法
Oct 02 Javascript
Angular中innerHTML标签的样式不起作用的原因解析
Jun 18 Javascript
解决vue语法会有延迟加载显现{{xxx}}的问题
Nov 14 Javascript
js实现的订阅发布者模式简单示例
Mar 14 Javascript
Javascript节流函数throttle和防抖函数debounce
Dec 03 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 date与gmdate的获取日期的区别
2010/02/08 PHP
php 随机排序广告的实现代码
2011/05/09 PHP
PHP CURL模拟登录新浪微博抓取页面内容 基于EaglePHP框架开发
2012/01/16 PHP
Linux下手动编译安装PHP扩展的例子分享
2014/07/15 PHP
走出JavaScript初学困境—js初学
2008/12/29 Javascript
js不能跳转到上一页面的问题解决方法
2013/03/01 Javascript
js打开windows上的可执行文件示例
2014/05/27 Javascript
javascript中2个感叹号的用法实例详解
2014/09/04 Javascript
jQuery多个input求和的实现方法
2015/02/12 Javascript
jQuery中 prop() attr()使用详解
2015/05/19 Javascript
探究JavaScript中的五种事件处理程序方式
2016/12/07 Javascript
详解js的延迟对象、跨域、模板引擎、弹出层、AJAX【附实例下载】
2016/12/19 Javascript
基于jQuery插件jqzoom实现的图片放大镜效果示例
2017/01/23 Javascript
分分钟玩转Vue.js组件(二)
2017/03/01 Javascript
基于Vue实现后台系统权限控制的示例代码
2017/08/29 Javascript
vue移动端轻量级的轮播组件实现代码
2018/07/12 Javascript
详解从Vue-router到html5的pushState
2018/07/21 Javascript
使用elementUI实现将图片上传到本地的示例
2018/09/04 Javascript
微信小程序CSS3动画下拉菜单效果
2018/11/04 Javascript
electron + vue项目实现打印小票功能及实现代码
2018/11/25 Javascript
解决vue cli使用typescript后打包巨慢的问题
2019/09/30 Javascript
微信浏览器下拉黑边解决方案 wScroollFix
2020/01/21 Javascript
node.js 微信开发之定时获取access_token
2020/02/07 Javascript
javascript 模块依赖管理的本质深入详解
2020/04/30 Javascript
移动端JS实现拖拽两种方法解析
2020/10/12 Javascript
[01:29:46]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第二局
2016/02/27 DOTA
Python爬虫实例_城市公交网络站点数据的爬取方法
2018/01/10 Python
Python 3.8 新功能来一波(大部分人都不知道)
2020/03/11 Python
基于tensorflow for循环 while循环案例
2020/06/30 Python
服务之星获奖感言
2014/01/21 职场文书
建设投标担保书
2014/05/13 职场文书
党支部活动策划方案
2014/08/18 职场文书
2014年学生会工作总结
2014/11/07 职场文书
培训通知
2015/04/17 职场文书
2016计算机专业毕业生自荐信
2016/01/28 职场文书
搞笑Gif:这么白这么长的腿像极了一楼的女朋友
2022/03/21 杂记