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弹出层始终垂直居中相对于屏幕或当前窗口
Apr 01 Javascript
Javascript实现动态菜单添加的实例代码
Jul 05 Javascript
浅析JavaScript作用域链、执行上下文与闭包
Feb 01 Javascript
基于Node.js + WebSocket打造即时聊天程序嗨聊
Nov 29 Javascript
JavaScript构建自己的对象示例
Nov 29 Javascript
axios拦截设置和错误处理方法
Mar 05 Javascript
使用JavaScript生成罗马字符的实例代码
Jun 08 Javascript
node中间层实现文件上传功能
Jun 11 Javascript
微信小程序new Date()方法失效问题解决方法
Jul 29 Javascript
JS实现移动端在线签协议功能
Aug 22 Javascript
VueQuillEditor富文本上传图片(非base64)
Jun 03 Javascript
抖音短视频(douyin)去水印工具的实现代码
Mar 30 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中10个不常见却非常有用的函数
2010/03/21 PHP
php动态生成缩略图并输出显示的方法
2015/04/20 PHP
php使用正则表达式去掉html中的注释方法
2016/11/03 PHP
jqPlot jquery的页面图表绘制工具
2009/07/25 Javascript
YUI模块开发原理详解
2013/11/18 Javascript
导入extjs、jquery 文件时$使用冲突问题解决方法
2014/01/14 Javascript
Array栈方法和队列方法的特点说明
2014/01/24 Javascript
javascript解析json实例详解
2014/11/05 Javascript
JavaScript中判断整数的多种方法总结
2014/11/08 Javascript
jQuery实现统计复选框选中数量
2014/11/24 Javascript
20条学习javascript的编程规范的建议
2014/11/28 Javascript
JavaScript中的分号插入机制详细介绍
2015/02/11 Javascript
jQuery实现鼠标点击弹出渐变层的方法
2015/07/09 Javascript
多种jQuery绑定事件的实现方式
2016/06/13 Javascript
原生js实现对Ajax的封装(仿jquery)
2017/01/22 Javascript
详解关于react-redux中的connect用法介绍及原理解析
2017/09/11 Javascript
详解JavaScript 中 if / if...else...替换方式
2018/07/15 Javascript
JQuery中queue方法用法示例
2019/01/31 jQuery
Python 序列的方法总结
2016/10/18 Python
python和shell监控linux服务器的详细代码
2018/06/22 Python
Python自动发送邮件的方法实例总结
2018/12/08 Python
python实现烟花小程序
2019/01/30 Python
Python 中Django验证码功能的实现代码
2019/06/20 Python
python中的逆序遍历实例
2019/12/25 Python
python使用SQLAlchemy操作MySQL
2020/01/02 Python
详解pyinstaller生成exe的闪退问题解决方案
2020/06/19 Python
python解释器安装教程的方法步骤
2020/07/02 Python
廉价连衣裙和婚纱礼服在线销售:Tbdress
2019/02/28 全球购物
加拿大的标志性百货公司:Hudson’s Bay(哈得逊湾)
2019/09/03 全球购物
俄罗斯天然和有机产品、健康生活网上商店:Fitomarket.ru
2020/10/09 全球购物
RIP版本1跟版本2的区别
2013/12/30 面试题
医学生实习自我鉴定
2013/09/27 职场文书
中专毕业生自荐信范文
2013/11/28 职场文书
大学生村官座谈会发言材料
2014/05/25 职场文书
电子信息专业应届生自荐信
2014/06/04 职场文书
Redis+AOP+自定义注解实现限流
2022/06/28 Redis