千家信息网

nodeJS之URL

发表于:2024-11-26 作者:千家信息网编辑
千家信息网最后更新 2024年11月26日,在HTTP部分,详细介绍了URL的相关知识。而nodejs中的url模块提供了一些实用函数,用于URL处理与解析。本文将详细介绍nodeJS中的URLURL对象解析 URL 对象有以下内容,依赖于他们
千家信息网最后更新 2024年11月26日nodeJS之URL

在HTTP部分,详细介绍了URL的相关知识。而nodejs中的url模块提供了一些实用函数,用于URL处理与解析。本文将详细介绍nodeJS中的URL

URL对象

  解析 URL 对象有以下内容,依赖于他们是否在 URL 字符串里存在。任何不在 URL 字符串里的部分,都不会出现在解析对象里

'http://user:pass@host.com:8080/p/a/t/h?query=string#hash'

┌─────────────────────────────────────────────────────────────────────────────┐│                                    href                                     │├──────────┬┬───────────┬─────────────────┬───────────────────────────┬───────┤│ protocol ││   auth    │      host       │           path            │ hash  ││          ││           ├──────────┬──────┼──────────┬────────────────┤       ││          ││           │ hostname │ port │ pathname │     search     │       ││          ││           │          │      │          ├─┬──────────────┤       ││          ││           │          │      │          │ │    query     │       │"  http:   // user:pass @ host.com : 8080   /p/a/t/h  ?  query=string   #hash "│          ││           │          │      │          │ │              │       │└──────────┴┴───────────┴──────────┴──────┴──────────┴─┴──────────────┴───────┘

  【href】: 准备解析的完整的 URL,包含协议和主机(小写)

'http://user:pass@host.com:8080/p/a/t/h?query=string#hash'

  【protocol】: 请求协议, 小写

'http:'

  【slashes】: 协议要求的斜杠(冒号后)

true 或 false

  【host】: 完整的 URL 小写 主机部分,包含端口信息

'host.com:8080'

  【auth】: url 中的验证信息

'user:pass'

  【hostname】: 域名中的小写主机名

'host.com'

  【port】: 主机的端口号

'8080'

  【pathname】: URL 中的路径部分,在主机名后,查询字符前,包含第一个斜杠

'/p/a/t/h'

  【search】: URL 中的查询字符串,包含开头的问号

'?query=string'

  【path】: pathname 和 search 连在一起

'/p/a/t/h?query=string'

  【query】: 查询字符串中得参数部分,或者使用 querystring.parse() 解析后返回的对象

'query=string' or {'query':'string'}

  【hash】: URL 的 "#" 后面部分(包括 # 符号)

'#hash'

URL方法

  URL模块包含分析和解析 URL 的工具。调用 require('url') 来访问模块

var url = require('url');/*{ parse: [Function: urlParse],  resolve: [Function: urlResolve],  resolveObject: [Function: urlResolveObject],  format: [Function: urlFormat],  Url: [Function: Url] } */console.log(url);

【url.parse(urlStr[, parseQueryString][, slashesDenoteHost])】

  输入 URL 字符串,返回一个对象

  第二个参数parseQueryString(默认为false),如为false,则urlObject.query为未解析的字符串,比如author=%E5%B0%8F%E7%81%AB%E6%9F%B4,且对应的值不会decode;如果parseQueryString为true,则urlObject.query为object,比如{ author: '小火柴' },且值会被decode

  第三个参数slashesDenoteHos(默认为false),如果为true,可以正确解析不带协议头的URL,类似//foo/bar里的foo就会被认为是hostname;如果为false,则foo被认为是pathname的一部分

var url = require('url');var str = 'http://user:pass@host.com:8080/p/a/t/h?author=%E5%B0%8F%E7%81%AB%E6%9F%B4#hash';/*Url {  protocol: 'http:',  slashes: true,  auth: 'user:pass',  host: 'host.com:8080',  port: '8080',  hostname: 'host.com',  hash: '#hash',  search: '?author=%E5%B0%8F%E7%81%AB%E6%9F%B4',  query: 'author=%E5%B0%8F%E7%81%AB%E6%9F%B4',  pathname: '/p/a/t/h',  path: '/p/a/t/h?author=%E5%B0%8F%E7%81%AB%E6%9F%B4',  href: 'http://user:pass@host.com:8080/p/a/t/h?author=%E5%B0%8F%E7%81%AB%E6%9F%B4#hash' } */console.log(url.parse(str));

var url = require('url');var str = 'http://user:pass@host.com:8080/p/a/t/h?author=%E5%B0%8F%E7%81%AB%E6%9F%B4#hash';/*Url {  protocol: 'http:',  slashes: true,  auth: 'user:pass',  host: 'host.com:8080',  port: '8080',  hostname: 'host.com',  hash: '#hash',  search: '?author=%E5%B0%8F%E7%81%AB%E6%9F%B4',  query: { author: '小火柴' },  pathname: '/p/a/t/h',  path: '/p/a/t/h?author=%E5%B0%8F%E7%81%AB%E6%9F%B4',  href: 'http://user:pass@host.com:8080/p/a/t/h?author=%E5%B0%8F%E7%81%AB%E6%9F%B4#hash' }  */console.log(url.parse(str,true));

var url = require('url');var str = '//foo/bar';var result1 = url.parse(str,true);var result2 = url.parse(str,true,true);console.log(result1.path);//'//foo/bar'console.log(result1.pathname);//'//foo/bar'console.log(result1.hostname);//nullconsole.log(result2.path);//'/bar'console.log(result2.pathname);//'/bar'console.log(result2.hostname);//'foo'

【url.format(urlObject)】

  url.parse(str)的反向操作,输入一个解析过的 URL 对象,返回格式化过的字符串

  urlObject包含了很多字段,比如protocol、slashes、protocol等,且不一定需要全部传,所以有一套解析逻辑

  格式化的工作流程如下

href 会被忽略protocol 无论是否有末尾的 : (冒号),会同样的处理http, https, ftp, gopher, file 协议会被添加后缀://mailto, xmpp, aim, sftp, foo, 等协议添加后缀:slashes 如果协议需要 ://,设置为 true仅需对之前列出的没有斜杠的协议,比如议 mongodb://localhost:8000/auth 如果出现将会使用.hostname 仅在缺少 host 时使用port 仅在缺少 host 时使用host 用来替换 hostname 和 portpathname 无论结尾是否有 / 将会同样处理search 将会替代 query属性无论前面是否有 / 将会同样处理query (对象; 参见 querystring) 如果没有 search,将会使用hash 无论前面是否有#,都会同样处理

var url = require('url');var obj = {  protocol: 'http:',  auth: 'user:pass',  host: 'host.com:8080',  hash: '#hash',  query: { author: '小火柴' }}//http://user:pass@host.com:8080?author=%E5%B0%8F%E7%81%AB%E6%9F%B4#hashconsole.log(url.format(obj));

【url.resolve(from, to)】

  url.resolve()方法以一种浏览器解析超链接的方式把一个目标URL解析成相对于一个基础URL,参数如下

from  解析时相对的基本 URL。to  要解析的超链接 URL。
var url = require('url');console.log(url.resolve('/one/two/three', 'four'));         // '/one/two/four'console.log(url.resolve('http://example.com/', '/one'));    // 'http://example.com/one'console.log(url.resolve('http://example.com/one', '/two')); // 'http://example.com/two'


字符 字符串 对象 部分 主机 处理 参数 小写 斜杠 模块 火柴 查询 信息 冒号 后缀 方法 格式 链接 输入 实用 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 尚文网络安全教育 pd创建oracle数据库模型 显示未能找到主机服务器 国家水稻数据库东升1号水稻 如何查看创建后的数据库状态 jsp数据库表格数据 类似共享净化器软件开发 数据库备份的必要性和重要性 基因基础表达量 数据库 网络安全宣教日主题活动ppt 广州畅海网络技术有限公司 企业网络安全及后续维护 手机端怎么控制云服务器 章丘智慧社区软件开发系统 捷科网络技术 sqlite在内存中创建数据库 中国网络技术的成就 北京正规网络技术分类设计 云计算 服务器 南阳会计财务软件开发 读取数据库中的日期时间 奉贤区专业性软件开发技术指导 网络发展观网络安全观 山西互联网养老软件开发哪儿好 绿盾客户端更改服务器地址 防火墙网关服务器接线图 软件开发实习调查报告 公司公开竞标软件开发新闻 如何设置同一行相同的数据库 南阳会计财务软件开发
0