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 经典动画菜单效果代码
Jan 26 Javascript
基于jQuery的公告无限循环滚动实现代码
May 11 Javascript
javascript 按键事件(兼容各浏览器)
Dec 20 Javascript
JavaScript给按钮绑定点击事件(onclick)的方法
Apr 07 Javascript
修改Jquery Dialog 位置的实现方法
Aug 26 Javascript
Servlet实现文件上传,可多文件上传示例
Dec 05 Javascript
Angular 4根据组件名称动态创建出组件的方法教程
Nov 01 Javascript
vue在使用ECharts时的异步更新和数据加载详解
Nov 22 Javascript
使用vue脚手架(vue-cli)搭建一个项目详解
May 09 Javascript
vue实现表单录入小案例
Sep 27 Javascript
解决vue使用vant下拉框van-dropdown-item 绑定title值不变问题
Aug 05 Javascript
开发一个封装iframe的vue组件
Mar 29 Vue.js
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生成二维码的几种方式整理及使用实例
2013/06/03 PHP
php中eval函数的危害与正确禁用方法
2014/06/30 PHP
PHP使用file_get_content设置头信息的方法
2016/02/14 PHP
win10环境PHP 7 安装配置【教程】
2016/05/09 PHP
PHP socket 模拟POST 请求实例代码
2016/07/18 PHP
thinkPHP实现的省市区三级联动功能示例
2017/05/05 PHP
PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】
2019/03/27 PHP
javascript编程起步(第二课)
2007/02/27 Javascript
JavaScript异步编程:异步数据收集的具体方法
2013/08/19 Javascript
JS动态添加与删除select中的Option对象(示例代码)
2013/12/20 Javascript
jquery操作下拉列表、文本框、复选框、单选框集合(收藏)
2014/01/08 Javascript
Java中Timer的用法详解
2015/10/21 Javascript
解决JS组件bootstrap table分页实现过程中遇到的问题
2016/04/21 Javascript
前端学习笔记style,currentStyle,getComputedStyle的用法与区别
2016/05/28 Javascript
Javascript实现通过选择周数显示开始日和结束日的实现代码
2016/05/30 Javascript
微信小程序 slider 详解及实例代码
2017/01/10 Javascript
JavaScript实现小球沿正弦曲线运动
2020/09/07 Javascript
vue获取时间戳转换为日期格式代码实例
2019/04/17 Javascript
vue-property-decorator用法详解
2019/12/12 Javascript
JS如何实现网站中PC端和手机端自动识别并跳转对应的代码
2020/01/08 Javascript
vue实现输入框自动跳转功能
2020/05/20 Javascript
python通过pil为png图片填充上背景颜色的方法
2015/03/17 Python
virtualenv实现多个版本Python共存
2017/08/21 Python
padas 生成excel 增加sheet表的实例
2018/12/11 Python
安装好Pycharm后如何配置Python解释器简易教程
2019/06/28 Python
python使用python-pptx删除ppt某页实例
2020/02/14 Python
使用OpenCV获取图片连通域数量,并用不同颜色标记函
2020/06/04 Python
将tf.batch_matmul替换成tf.matmul的实现
2020/06/18 Python
python 根据列表批量下载网易云音乐的免费音乐
2020/12/03 Python
美国一家著名的手表在线折扣网站:Discount Watch Store
2020/02/24 全球购物
银行员工辞职信范文
2014/01/20 职场文书
创新比赛获奖感言
2014/02/13 职场文书
七年级数学教学反思
2016/02/17 职场文书
go使用Gin框架利用阿里云实现短信验证码功能
2021/08/04 Golang
Python中的turtle画箭头,矩形,五角星
2022/03/16 Python
MySQL中dd::columns表结构转table过程及应用详解
2022/09/23 MySQL