node系列之url模块

苍青浪 苍青浪     2022-10-09     440

关键词:

引入 url:
   const url = require("url");

用于URL解析、处理等操作的解决方案

1.url.parse(urlStr[, parseQueryString][, slashesDenoteHost])

将url字符串转换成object对象

/**
 * urlStr:需要处理的url字符串
 * parseQueryString: 是否将查询参数也解析成对象
 *   为true时将使用查询模块分析查询字符串,默认为false
 * slashesDenoteHost: 解析主机处理,双斜线表示主机
 *  默认为false,//foo/bar 形式的字符串将被解释成 { pathname: ‘//foo/bar‘ }
 *  如果设置成true,//foo/bar 形式的字符串将被解释成  { host: ‘foo‘, pathname: ‘/bar‘ }
 */

实例1,仅指定url字符解析成对象

 

var url=require(‘url‘);  
var url1=‘http://calc.gongjuji.net/byte/?name=zhangsan&age=18#one#two‘;  
var result=url.parse(url1);  
 { 
	protocol: ‘http:‘,    //使用协议  
    slashes: true,        //  
	auth: null,           // 验证信息  
	host: ‘calc.gongjuji.net‘, //全小写的主机部分的URL,包括端口信息。  
	port: null,                //端口  
	hostname: ‘calc.gongjuji.net‘,//小写的主机部分的主机  
	hash: ‘#one#two‘,             //页面锚点参数部分  
	search: ‘?name=zhangsan&age=18‘,//查询参数部分,带?  
	query: ‘name=zhangsan&age=18‘,  //查询参数部分  
	pathname: ‘/byte/‘,             //目录部分  
	path: ‘/byte/?name=zhangsan&age=18‘,//目录+参数部分  
    href: ‘http://calc.gongjuji.net/byte/?name=zhangsan&age=18#one#two‘  //最初解析的完整的网址。双方的协议和主机是小写。  
 }   


 

实例2 ,指定是否解析参数部分成对象

//参数解析  
var result2=url.parse(url1,true);  
	 { protocol: ‘http:‘,  
	  slashes: true,  
      auth: null,  
      host: ‘calc.gongjuji.net‘,  
      port: null,  
	  hostname: ‘calc.gongjuji.net‘,  
	  hash: ‘#one#two‘,  
      search: ‘?name=zhangsan&age=18‘,  
      query: { name: ‘zhangsan‘, age: ‘18‘ }, //页面参数部分,已经解析成对象了  
      pathname: ‘/byte/‘,  
      path: ‘/byte/?name=zhangsan&age=18‘,  
      href: ‘http://calc.gongjuji.net/byte/?name=zhangsan&age=18#one#two‘ }  


 

实例3,主机特殊解析

//双斜线表示主机  
	var url2=‘//www.gongjuji.net/byte/?name=zhangsan#one‘;  
	 { 
	  protocol: null,  
	  slashes: true,  
      auth: null,  
	  host: ‘www.gongjuji.net‘,  
	  port: null,  
	  hostname: ‘www.gongjuji.net‘,  
      hash: ‘#one‘,  
	  search: ‘?name=zhangsan‘,  
	  query: { name: ‘zhangsan‘ },  
	  pathname: ‘/byte/‘,  
	  path: ‘/byte/?name=zhangsan‘,  
	  href: ‘//www.gongjuji.net/byte/?name=zhangsan#one‘ 
	 }  
	  var result3=url.parse(url2,true,true);  
      console.info(result3);  


 

2.url.format(urlObj)  将json对象格式化成字符串

var url=require(‘url‘);  
var obj1={ 
  protocol: ‘http:‘,      
  slashes: true,         
  auth: null,           
  host: ‘calc.gongjuji.net‘,   
  port: null,                 
  hostname: ‘calc.gongjuji.net‘,  
  hash: ‘#one#two‘,              
  search: ‘?name=zhangsan&age=18‘,  
  query: ‘name=zhangsan&age=18‘,    
  pathname: ‘/byte/‘,              
  path: ‘/byte/?name=zhangsan&age=18‘,  
  href: ‘http://calc.gongjuji.net/byte/?name=zhangsan&age=18#one#two‘   
};  
var url1=url.format(obj1);  
console.log(url1);//http://calc.gongjuji.net/byte/?name=zhangsan&age=18#one#two  



//请求参数为为json对象  
var obj2={ 
	protocol: ‘http:‘,  
	slashes: true,  
	auth: null,  
	host: ‘calc.gongjuji.net‘,  
	port: null,  
	hostname: ‘calc.gongjuji.net‘,  
	hash: ‘#one#two‘,  
	search: ‘?name=zhangsan&age=18‘,  
	query: { name: ‘zhangsan‘, age: ‘18‘ }, //页面参数部分,已经解析成对象了  
	pathname: ‘/byte/‘,  
	path: ‘/byte/?name=zhangsan&age=18‘,  
	href: ‘http://calc.gongjuji.net/byte/?name=zhangsan&age=18#one#two‘ 
   };  

var url2=url.format(obj2);  
console.log(url2); //http://calc.gongjuji.net/byte/?name=zhangsan&age=18#one#two  

//缺少参数的情况  
var obj3={ 
	protocol: null,  
	slashes: true,  
	auth: null,  
	host: ‘www.gongjuji.net‘,  
	port: null,  
	hostname: ‘www.gongjuji.net‘,  
	hash: ‘#one‘,  
	search: ‘?name=zhangsan‘,  
	query: { name: ‘zhangsan‘ },  
	pathname: ‘/byte/‘,  
	path: ‘/byte/?name=zhangsan‘,  
	href: ‘//www.gongjuji.net/byte/?name=zhangsan#one‘ };  

var url3=url.format(obj3);  
console.log(url3);//www.gongjuji.net/byte/?name=zhangsan#one  


 

3.url.resolve(from, to)  

 

返回从根目录指定到当前目录的绝对路径url
1.返回结果去除了参数和锚点
2.返回结果标准url路径格式

var url=require(‘url‘); 
 
//指定相对路径  
var url1=url.resolve(‘http://www.gongjuji.net/one/two/three‘,‘four‘);  
console.log(url1); //http://www.gongjuji.net/one/two/four  

//指定根目录的相对路径  
var url3=url.resolve(‘http://www.gongjuji.net/one/two/three‘,‘/four‘);  
console.log(url3); //http://www.gongjuji.net/four  

//带参数的相对路径  
var url2=url.resolve(‘http://www.gongjuji.net/one/two/three?name=zhangsan‘,‘four‘);  
console.log(url2); //http://www.gongjuji.net/one/two/four  

//非标准分隔符的原路径  
var url4=url.resolve(‘http://www.gongjuji.net\one#name1‘,‘/four‘);  
console.log(url4);//http://www.gongjuji.net/four  

//非标准分隔符的相对路径  
var url5=url.resolve(‘http://www.gongjuji.net/one‘,‘\two\three‘);  
console.log(url5);//http://www.gongjuji.net/two/three  

 

nodejs学习笔记之node中的数据交互

...提交信息给服务端(url?username=xxx&password=xxx);引入url模块,通过url.parse(request.url,true)获取json数据。demo1.html:<!DOCTYPEhtml><html><head>< 查看详情

vue.js系列之项目搭建

项目搭建具体步骤如下:1.安装node(中)https://nodejs.org/zh-cn/(英)https://nodejs.org/en/2.安装cnpm镜像(node自带安装了npm,故不再安装)$npminstall-gcnpm--registry=https://registry.npm.taobao.org安装模块时安装方法$cnpminstall[name]3.快速学习Vue2.0 查看详情

vue.js系列之项目搭建

项目搭建具体步骤如下:1.安装node到官网下载安装,我这里是win7系统。(中)https://nodejs.org/zh-cn/(英)https://nodejs.org/en/2.安装cnpm镜像(node自带安装了npm,故不再安装)?1$npminstall-gcnpm--registry=https://registry.npm.taobao.org安装模块时... 查看详情

bfzwjeqjspringmc学习系列之url

bfzwjeqjSpriNgMc学习系列(3)之urlχ绦bfzwjeqjSpriNgMc学习系列(3)之url 查看详情

实战系列之node.js玩转java

这些年以来,Node.js的兴起,JavaScript已经从当年的“世界最被误解的语言”变成了“世界最流行的语言”。且其发展之势,从语言本身的进化,库和包的增长,工具支持的完善,star项目和领域解决方案的涌现,平台... 查看详情

node.js进程管理之process模块

...器都是多处理器,为了方便使用多个进程,Node.js提供了3个模块。Process模块提供了访问正在运行的进程。child_process模块可以创建子进程,并与他们通信。cluster模块提供了实现共享相同端口的集群服务能力,允许多个请求同时处理... 查看详情

node.js模块(代码片段)

...是Node.js官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求。在JavaScript代码中使用fs模块时,需提前导入:const fs 查看详情

爬虫系列

爬虫系列之第1章-requests模块爬虫系列之第2章-BS和Xpath模块爬虫系列之第3章-Selenium模块爬虫系列之第4章-scrapy框架    查看详情

node的url模块

   .parse(url,query2obj[boolean],ignorePrototype[boolean])   .format({})和.parse相反,将带有url参数属性的对象组装成url   .resolve()将参数组合成url字符串 查看详情

node之http模块总结

[文档归档文] 参考文献:https://nodejs.org/dist/latest-v6.x/docs/api/http.html 查看详情

nodejs学习笔记之node的模块

一、全局模块定义:何时何地都能访问,不需要引用。process.env返回项目运行所在的环境变量信息。process.argv参数数组(能接收通过命令执行node程序时所传入的参数),参数1:返回当前node所在路径,参数2:返回当前文件路径例子... 查看详情

node内置模块-url

url类比json记忆url.parse将url字符串转成对象url.format将url对象转字符串consturl=require(‘url‘)leturlString=‘https:47.95.207.1:3000/fcj/recommend/hot/hehe?us=123&ps=567#nihao‘leturlObj=url.parse(urlString)console.log( 查看详情

系列文章--node.js学习笔记系列

Node.js学习笔记系列总索引Nodejs学习笔记(一)---简介及安装Node.js开发环境Nodejs学习笔记(二)---事件模块Nodejs学习笔记(三)---模块Nodejs学习笔记(四)---与MySQL交互(felixge/node-mysql)Nodejs学习笔记(五)---Express安装入门与模... 查看详情

《基于node.js实现简易聊天室系列之引言》

   简述:这个聊天室是基于Node.js实现的,完成了基本的实时通信功能。在此之前,对node.js和mongodb一无所知,但是通过翻阅博客,自己动手基本达到了预期的效果。技术,不应该是闭门造车,而是学会分享总结才能进... 查看详情

node模块之events模块(代码片段)

events模块只提供了一个对象:events.EventEmitter。【EventEmitter的核心就是事件触发与事件监听器功能的封装。】EventEmitter的每个事件由一个事件名和若干个参数组成,事件名是一个字符串,通常表达一定的语义。对于每个事件,EventEm... 查看详情

标准库系列之xml模块

Python标准库系列之xml模块Python’sinterfacesforprocessingXMLaregroupedinthexmlpackage.带分隔符的文件仅有两维的数据:行和列。如果你想在程序之间交换数据结构,需要一种方法把层次结构、序列、集合和其他的结构编码成文本。XML是最突... 查看详情

arduino系列之按键模块

今天我将简单介绍按键模块计数的原理:我们常用的按键及按键模块有2脚和4脚的,其内部结构如图所示,当按下按键时就会接通按键两端,当放开时,两端自然断开。             &... 查看详情

node.js之htpp服务一

....js也不例外。今天主要是熟悉下Node.js中HTTP服务。其实HTTP模块是相当低层次的,它不提供路由、cookie、缓存等,像Web开发中不会直接使用,但还是要熟悉下,这样也方便以后的学习。一、统一资源标识符URL这个是非常常见的,在Node.j... 查看详情