五、path路径模块和url模块

news2024/11/24 20:28:21

         上一篇内容讲到的fs文件系统模块是官方提供的内置模块,本篇path路径模块也是Node.js官方提供的内置模块,也是核心模块,用来处理路径,path模块用来满足用户对路径的处理需求。在上一篇内容就涉及到路径拼接的问题,来一个简单的例子:

// 相对路径
fs.readFile('./read.txt'...)
// 完整路径
fs.readFile('C:\Users\Administrator\Desktop\Node\fs模块/read.txt'...)
// __dirname 处理
fs.readFile(__dirname + '/read.txt'...)

 引入path模块

const path = require('path');

        在path路径模块内容中对路径拼接的方法,虽然可以通过 "+" 来进行拼接,但在path路径模块中有对应的路径拼接方法;

path.join()  —— 路径拼接

        路径拼接,path.join([...paths]),...paths <string> 一个路径片段序列;返回值是<string>

// join.js文件
const path = require('path');
const rs_1 = path.join('/Node','/path');
console.log(rs_1);
const rs_2 = path.join('/Node','/path','..','/join');
console.log(rs_2);

// join.js文件
const path = require('path');
const rs_1 = path.join(__dirname , '/Node' ,'/path');
console.log(rs_1);
const rs_2 = path.join(__dirname , '/Node/read.txt' );
console.log(rs_2);


fs.readFile() 和 path.join()  

        通过path.join()拼接路径,使用fs.readFile()读取;

// read.txt
path路径内容
// read_join.js
const fs = require('fs');
const path = require('path');
fs.readFile(path.join(__dirname,'/read.txt'),'utf8',function(err,dataStr){
    console.log(path.join(__dirname,'/read.txt'));
    if(err){
        return console.log("读取失败!")
    }
    console.log("读取成功:",dataStr);
})

         通过使用path.join()路径拼接的使用,在之后的进行路径的拼接过程都要使用path.join()方法来处理路径的拼接,不再使用 "+" 进行拼接;


path.basename 获取路径中的文件名称

        path.basename(path[,ext]),ext是文件拓展名(后缀),使用path.basename可以获取path的最后一部分,一般都是文件名称;

// basename.js文件
const path = require('path');
const pName = '/Node/path/index.html';
const rs = path.basename(pName);
console.log(rs);

// 修改basename.js文件
const rs = path.basename(pName,'.html');    // 移除拓展名
console.log(rs);

 path.extname() 获取路径中的文件拓展名

        获取路径中的文件拓展名可以通过path.extname(path)来获取,如下:

// extname.js文件
const path = require('path');
const pName = '/Node/path/index.html';
const rs = path.extname(pName);
console.log(rs);


path.parse() 和 path.format()

        path.parse() 可以获取一个路径对象,而path.format() 可以将路径对象转为一个路径;

// parse_format.js
const path = require('path');
const rs = path.parse(__dirname);
console.log(rs);
const obj = {
    root: 'C:\\',
    dir: 'C:\\Users\\Administrator\\Desktop\\node\\Node',
    base: 'path模块',
    ext: '',
    name: 'path模块'
  };
const re_s = path.format(obj);
console.log(re_s);


path.isAbsolute() 是否为绝对路径

        通过path.isAbsolute(path)来判断一个路径是否为绝对路径;若path的路径长度为0,则返回false值;

// isAbsolute.js文件
const path = require('path');
const rs = path.isAbsolute(__dirname);
console.log(rs);

path.resolve()

        path.resolve([...path]),将[...path]解析为绝对路径,可以是完整路径或路径片段;路径处理的序列是从右往左的处理解析的,直到能构造成一个完成绝对路径;

const path = require('path');
const rs_1 = path.resolve('/sd','/s');        // C:\s           
const rs_2 = path.resolve('/sd','s');         // C:\sd\s
const rs_3 = path.resolve('sd','/s');         // C:\s
const rs_4 = path.resolve('/sd','/s','/d');   // C:\d
const rs_5 = path.resolve('sd','/s','/d');    // C:\d
const rs_6 = path.resolve('sd','s','/d');     // C:\d
const rs_7 = path.resolve('sd','/s','d');     // C:\s\d
const rs_8 = path.resolve('/sd','s','d');     // C:\sd\s\d

引入url模块

        url模块也是Node.js中的核心模块内容,在一些GET请求当中会见到在请求url当中会携带一些属性和值,在应用过程中会涉及到需要从完整的url请求的路径中提出各个属性以及值的各种问题,通过Node.js中url模块就能够来解决这类问题!

// 引入url模块
const url = require('url');

url.parse() —— 对象 

        url.parse(urlString[,parseQueryString,slashesDenoteHost]),使用该方法可以将一个字符串形式的url(urlString) 转为对象形式的url,parseQueryString为true时将使用查询模块分析字符串,slashesDenoteHost为false时 '//Node/node' 会解析为 '{pathname:'//Node/node'}',设为true时则解析为:{ host:'/Node' ,pathname:'/node' };

const url = require('url');
const net = 'http://localhost:8080/api/picture?page=1&id=1001';
console.log(url.parse(net,false,false));

 url.format() —— 字符串

        url.format()与url.parse()相反,可以将一个url对象进行转为url字符串;

const url = require('url');
const netObj = {
    protocol: 'http:',
    slashes: true,
    auth: null,
    host: 'localhost:8080',
    port: '8080',
    hostname: 'localhost',
    hash: null,
    search: '?page=1&id=1001',
    query: 'page=1&id=1001',
    pathname: '/api/picture',
    path: '/api/picture?page=1&id=1001',
    href: 'http://localhost:8080/api/picture?page=1&id=1001'
}
console.log(url.format(netObj));

url.resolve(from,to)

        from 表示源地址,to 表示需要添加或替换;

const url = require('url');
const u_1 = url.resolve('/Node/node','url');
console.log(u_1);
const u_2 = url.resolve('/Node/node','/url');
console.log(u_2);

        以上内容记录的就是在Node.js中path模块和url模块需要掌握的内容!感谢大家的支持! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/102327.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1 数据结构 绪论(时间空间复杂度)

文章链接是我的掘金博客&#xff0c;大家有兴趣可以去我的博客上看 博客地址&#xff1a;数据结构专栏 1 数据结构 绪论&#xff08;时间空间复杂度&#xff09;考纲要求 &#x1f495;1 术语&#xff08;逻辑结构&存储结构&#xff09;1.1 数据结构的形式定义&#xff08;…

【图像分割】遗传算法优化K聚类图像分割【含Matlab源码 1605期】

⛄一、遗传算法优化K聚类简介 文中提出基于优化遗传算法的模糊聚类图像分割算法, 是在上述对遗传算法进行了优化的基础上形成的。不仅根据个体适应度大小和变化快慢自适应调节变异率和交叉率, 提高计算准确性和效率, 另外, 在遗传算法迭代计算中加入基于曲线二阶导数的约束条件…

JavaWeb框架(三):JavaWeb项目实战 基于Servlet 实现系统登录注册功能

MVC实战项目 仓储管理系统需求&#xff1a;实现基本的登录和注册功能MVC实战项目&#xff1a;登录和注册登录功能实现注册功能实现总结Redis章节复习已经过去&#xff0c;新的章节JavaWeb开始了&#xff0c;这个章节中将会回顾JavaWeb实战项目 公司管理系统部分功能 代码会同步…

「地表最强」C++核心编程(四)类和对象--继承

环境&#xff1a; 编译器&#xff1a;CLion2021.3&#xff1b;操作系统&#xff1a;macOS Ventura 13.0.1 文章目录一、继承的基本语法二、继承方式2.1 public继承2.2 protected继承2.3 private继承2.4 继承规则三、继承中的对象模型四、继承中的构造和析构顺序五、继承同名成员…

PyQt5利用Qt designer(QT设计师)使用tab widget和stacked widget实现多页面切换

PyQt5 Qt designer QT设计师 使用tab widget和stacked widget实现多页面切换一、使用Qt designer(QT设计师)进行多页面切换ui设计二、实现tab widget多页面切换三、实现stacked widget多页面切换四、生成代码五、运行效果一、使用Qt designer(QT设计师)进行多页面切换ui设计 本…

Go 实现线性查找算法和二分查找算法

耐心和持久胜过激烈和狂热。 哈喽大家好&#xff0c;我是陈明勇&#xff0c;今天分享的内容使用 Go 实现线性查找算法和二分查找算法。如果本文对你有帮助&#xff0c;不妨点个赞&#xff0c;如果你是 Go 语言初学者&#xff0c;不妨点个关注&#xff0c;一起成长一起进步&…

雪花算法原理

SnowFlake算法生成id的结果是一个64bit大小的整数&#xff0c;它的结构如下图&#xff1a;1bit&#xff0c;不用&#xff0c;因为二进制中最高位是符号位&#xff0c;1表示负数&#xff0c;0表示正数。生成的id一般都是用整数&#xff0c;所以最高位固定为0。41bit时间戳&#…

热门技术中的应用:云计算中的网络-第27讲-云中的网络QoS:邻居疯狂下电影,我该怎么办?

在小区里面,是不是经常有住户不自觉就霸占公共通道,如果你找他理论,他的话就像一个相声《楼道曲》说的一样:“公用公用,你用我用,大家都用,我为什么不能用?”。 除此之外,你租房子的时候,有没有碰到这样的情况:本来合租共享WiFi,一个人狂下小电影,从而你网都上不…

编程15年40岁程序员的我终于在压力下被迫转行了

本人今年40岁多了&#xff0c;中山大学计算机小硕&#xff0c;已经从事it工作15年多&#xff0c;最后一次工作是2017年&#xff0c;创业&#xff0c;互联网教育方向&#xff0c;2020年失败关闭公司。 创业失败后&#xff0c;在家沉淀了几个月&#xff0c;然后决定再次找工作。…

如何在UnrealEngine虚幻引擎中进行版本管理

项目团队中的分工协作必不可少&#xff0c;在UE项目中进行版本控制非常必要。UE支持使用Perforce和SVN进行版本管理&#xff0c;此处选用自己比较熟悉的SVN。 1.使用SVN进行源码管理 通过编辑器偏好设置窗口&#xff08;编辑&#xff08;Edit&#xff09;> 编辑器偏好设置&…

9. Spring注解开发

1. 注解开发定义Bean对象 目的&#xff1a;xml配置Bean对象有些繁琐&#xff0c;使用注解简化Bean对象的定义 1.1 在applicationContext.xml中开启Spring注解包扫描 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.spr…

33 CPP类多态-如何析构派生类

33 CPP类多态-如何析构派生类 派生类的析构函数在执行完后&#xff0c;会自动执行基类的析构函数&#xff0c;这是C编译器强制的规定。 这时候基类的内存模型&#xff1a;AA表示的就是Person类 将基类的析构函数设置为虚函数后。 基类的虚函数表中多了一个函数&#xff0c;但是…

性能测试(二)—— 常用测试工具、JMeter环境搭建、JMeter功能概述

目录 一、常用性能测试工具 1. 主流性能测试工具 1.1 LoadRunner 1.2 JMeter 1.3 LoadRunner 与 JMeter对比 二、JMeter环境搭建 1. 安装JDK 1.1 JDK下载 1.2 JDK配置环境变量 2. 安装JMeter 2.1 下载 2.2 安装 2.3 Jmeter环境配置 2.4 启动验证 三、JMeter功能…

[附源码]计算机毕业设计Python的中点游戏分享网站(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

反应式编程框架设计:如何使得程序调用不阻塞等待

前言&#xff1a; 程序在高并发的情况下&#xff0c;程序容易崩溃。主要的原因是&#xff1a;在高并发的情况下&#xff0c;有大量用户请求需要程序计算处理&#xff0c;而目前的处理方式是&#xff0c;为每个用户请求分配一个线程&#xff0c;当程序内部因为访问数据库等原因…

软件测试:Java VS Python,刚开始应该选择哪门语言进行入门呢?

前言 当你学完软件测试基本理论&#xff0c;掌握业务测试流程&#xff0c;功能测试可以搞定&#xff0c;数据库和linux玩得也很溜时&#xff0c;接下来想进一步进阶&#xff0c;那么学习一门编程语言必不可少。 同时&#xff0c;学习一门编程语言也是你成为自动化测试工程师乃…

如何正确使用JMeter性能测试?紧扣面试实际要求

前段时间专门挑了一段时间在准备面试。经过两次面试后&#xff0c;有一些比较深刻的认识。对于企业要求来说&#xff0c;除了对专业理论知识考究之外&#xff0c;对测试工具这块也是看重的。 一、使用JMeter测试快速入门 1、线程组是什么 进程&#xff1a; 一个正在执行的程序…

图解设计模式: 有趣的工厂模式

工厂模式 Factory Method 在工厂模式中 父子类的关系就像是生产工厂中模具一样, 由父类负责指定实例生成的方式 子类来决定生成具体的类. 具体的处理全部交给子类负责&#xff0c;目的就是为了将生产实例的框架和负责实例生产类解耦 示例程序 从下面这段示例来看看工厂模式到…

Codeforces Round #839 (Div. 3)

A. AB? 题意&#xff1a; t组测试每组给出以ab的形式给出算式&#xff0c;求ab的值。&#xff08;a,b都是0~9&#xff09; 代码&#xff1a; tint(input()) for i in range(t):sinput()print(eval(s)) B. Matrix Rotation 题意&#xff1a; t组测试每组给一个2*2的矩阵&…

NoSQL数据库原理与应用综合项目——Redis篇

NoSQL数据库原理与应用综合项目——Redis篇 文章目录NoSQL数据库原理与应用综合项目——Redis篇0、 写在前面1、本地数据或HDFS数据导入到Redis2、Redis数据库表操作2.1 Java API 连接Redis2.2 查询数据2.3 插入数据2.4 修改数据2.5 删除数据3、Windows远程连接Redis(Linux)4、…