nodejs的path模块

news2024/11/23 11:45:06

path路径模块

path模块是Node.js官方提供的,用来处理路径的模块。提供一系列的方法和属性,用来满足用户对路径的处理需求。

例如:

如果在js代码中,使用path模块来处理路径,需要先导入

const path=require('path')

常用的API

path.resolve拼接规范的绝对路径

path.sep获取操作系统的路径分隔符

path.parse解析路径并返回对象

path.basename获取路径的基础名称

path.dirname获取路径的目录名

path.extname获取路径的扩展名

path.join()方法

用来将多个路径片段拼接成一个完整的路径字符串

path.join的代码实例

path.join()方法,用来将多个路径片段拼接成一个完整的路径字符串

fs.readFile(path.join(__dirname, './files/1.txt'), 'utf8', function (err, dataStr) {
    if (err) {
        return console.log(err.message)
    }
    console.log(dataStr)
})

注意:今后凡是涉及到路径拼接的操作,都要使用path.join()方法进行处理,不要直接使用+进行字符串的拼接。

如果使用+,那么容易出现问题
比如在fs.readFile(path.join(__dirname+‘./files/1.txt’)代码会报错,因为多了一个.,应该是fs.readFile(path.join(__dirname+‘/files/1.txt’),就差一点就对了,当前足够细心的话这个问题也很容易定位到,当然通过更好的代码习惯去规避这些小问题肯定是更好的啦
在这里插入图片描述

path.basename()方法

用来从路径字符串中,将文件名解析出来。

语法格式

path.basename(path[, suffix])

path必选参数,表示一个路径的字符串

suffix可选参数,文件扩展名

返回路径中的最后一部分

path.basename()的代码实例

const path = require('path')

// 定义文件的存放路径
const fpath = 'a/b/c/index.txt'

var fullName = path.basename(fpath)
console.log(fullName)//输出index.html

var nameWithoutExt = path.basename(fpath, '.txt')
console.log(nameWithoutExt)//输出index

在这里插入图片描述

path.extname()

可以使用path.extname()方法获取路径中的扩展名部分

语法格式

path.extname(path)

path.extname()代码实例

const path = require('path')
const fpath = 'a/b/c/index.txt'

const fext = path.extname(fpath)
console.log(fext)

代码运行截图
在这里插入图片描述

综合案例-时钟案例

案例要实现的功能

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>index首页</title>
    <style>
        html,
        baby {
            margin: 0;
            padding: 0;
            height: 100%;
            background-image: linear-gradient(to bottom right, red, gold);
        }
 
        .box {
            width: 400px;
            height: 250px;
            background-color: rgba(255, 255, 255, 0.6);
            border-radius: 6px;
            position: absolute;
            left: 50%;
            top: 40%;
            transform: translate(-50%, -50%);
            box-shadow: 1px 1px 10px #fff;
            text-shadow: 0px 1px 30px white;
            display: flex;
            justify-content: space-around;
            align-items: center;
            font-size: 70px;
            user-select: none;
            padding: 0 20px;
 
            /*    盒子投影*/
            -webkit-box-reflect: below 0px -webkit-gradient(linear, left top, left bottom, from(transparent),
            color-stop(0%, transparent), to(rgba(250, 250, 250, .2)));
        }
    </style>
</head>
<body>
<div class="box">
    <div id="HH">00</div>
    <div>:</div>
    <div id="mm">00</div>
    <div>:</div>
    <div id="ss">00</div>
</div>
<script>
    window.onload = function () {
        //    定时器,每隔1秒执行1次
        setInterval(() => {
            var dt = new Date()
            var HH = dt.getHours()
            var mm = dt.getMinutes()
            var ss = dt.getSeconds()
 
            //    为页面上的元素赋值
            document.querySelector('#HH').innerHTML = padZero(HH)
            document.querySelector('#mm').innerHTML = padZero(mm)
            document.querySelector('#ss').innerHTML = padZero(ss)
        }, 1000)
    }
 
    //    补零函数
    function padZero(n) {
        return n > 9 ? n : '0' + n
    }
</script>
</body>
</html>

将素材目录下的index.html页面,拆分成三个文件,分别是:

index.css

index.js

idex.html

并且将拆分出来的3个文件,存放到clock目录中

案例实现的步骤

  • 导入需要的模块,创建两个正则表达式,分别用来匹配

实现代码

// 1.1导入fs文件系统模块
const fs = require('fs')

// 1.2导入path路径处理模块
const path = require('path')

// 1.3.1匹配style标签的正则
// \s表示空白字符; \S表示非空白字符; *表示匹配任意次
const regStyle = /<style>[\s\S]*<\/style>/

// 1.3.2匹配script标签的正则
const regScript = /<script>[\s\S]*<\/script>/

//  2.1调用fs.readFile() 方法读取文件
fs.readFile(path.join(__dirname, './素材/index.html'), 'utf8', function (err, dataStr) {
//  2.2读取HTML文件失败
    if (err) return console.log('读取HTML文件失败!' + err.message)
//  2.3读取文件成功后,调用对应的三个方法,分别拆解出css, js, html文件
    resolveCSS(dataStr)
    resolveJS(dataStr)
    resolveHtml(dataStr)
})

// 3.1 定义处理css样式的方法
function resolveCSS(htmlStr) {
//    3.2 使用正则提取需要的内容
    const r1 = regStyle.exec(htmlStr)
//    3.3 将提取出来的样式字符串,进行字符串的replace替换操作,去掉首位标签
    const newCSS = r1[0].replace('<style>', '').replace('</style>', '')
//    3.4 调用fs.wirteFile()方法,将提取的样式,写入到clock目录中index.css的文件里面
    fs.writeFile(path.join(__dirname, './clock/index.css'), newCSS, function (err) {
        if (err) return console.log('写入css样式失败!' + err.message)
        console.log('写入样式文件成功!')
    })
}
 
// 4.1处理js脚本
function resolveJS(htmlStr) {
//4.2 通过正则,提取对于的<script></script> 标签内容
    const r2 = regScript.exec(htmlStr)
//    4.3将提取出来的内容,做进一步的处理
    const newJS = r2[0].replace('<script>', '').replace('</script>', '')
//    4.4将处理的结果,写入到clock目录中的index.js文件里面
    fs.writeFile(path.join(__dirname, './clock/index.js'), newJS, function (err) {
        if (err) return console.log('写入JavaScri脚本失败!' + err.message)
        console.log('写入JS脚本成功!')
    })
}
 
//5.1定义处理HTML结构的方法
function resolveHtml(htmlStr) {
    //    5.2 将字符串调用replace方法,把内嵌的style和script标签,替换为外联的link和script标签
    const newHTML = htmlStr.replace(regStyle, '<link rel ="stylesheet" href="./index.css" />').replace(regScript, '<script src="./index.js"></script>')
    //    5.3 写入index.html 这个文件
    fs.writeFile(path.join(__dirname, './clock/index.html'), newHTML, function (err) {
        if (err) return console.log('写入HTML文件失败!' + err.message)
        console.log('写入HTML页面成功!')
    })
}


案例中的两个注意点

  • fs.write()方法只能用来创建文件,不能用来创建路径
    完成时钟案例运行代码运行失败,因为路径中没有clock文件夹,fs.write不能创建路径,所以导致写入文件失败。手动创建clock文件夹之后路径正确文件写入成功
    在这里插入图片描述

  • 重复调用fs.writeFile()写入同一个文件,新写入的内容会覆盖之前的旧的内容。
    在这里插入图片描述

重复执行node操作,依然会成功,新写入的内容会覆盖旧的内容。

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

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

相关文章

chatgpt赋能python:Python如何调成白色的SEO文章

Python 如何调成白色的 SEO 文章 介绍 Python 是一种流行的编程语言&#xff0c;在数据分析、人工智能、Web 开发以及其他许多领域都有广泛的应用。然而&#xff0c;很少有人会把 Python 与 SEO 联系起来。 事实上&#xff0c;Python 是一个强大的工具&#xff0c;可以帮助 …

软件工程师,学会封装不香么

什么是封装 从面向对象编程的角度来说&#xff0c;封装是指利用抽象数据类型将数据和基于数据的操作封装在一起&#xff0c;使其构成一个不可分割的独立实体&#xff0c;数据被保护在抽象数据类型的内部&#xff0c;尽可能地隐藏内部的细节&#xff0c;只保留一些对外接口使之与…

rk3568 TF卡启动

rk3568 SD卡启动 SD卡启动系统&#xff0c;它可以让rk3568在没有硬盘或其他存储设备的情况下启动和运行操作系统。这使得rk3568变得与树梅派一样灵活切换系统&#xff0c;与此同时进行故障排查和修复&#xff0c;而不需要拆卸设备或者使用专业的烧录工具。SD卡启动还可以方便地…

音视频同步的方法:深入探索基于FFmpeg的音视频同步策略

音视频同步艺术&#xff1a;深入探索基于FFmpeg的同步策略 &#xff08;一&#xff09;音视频同步的基本概念与重要性&#xff08;Basic Concepts and Importance of Audio-Video Synchronization&#xff09;1.1 音视频同步的定义与影响&#xff08;Definition and Impact of …

【SQL】Oracle数据库实现远程访问

文章目录 前言1. 数据库搭建2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射 3. 公网远程访问4. 配置固定TCP端口地址4.1 保留一个固定的公网TCP端口地址4.2 配置固定公网TCP端口地址4.3 测试使用固定TCP端口地址远程Oracle 前言 Oracle&#xff0c;是甲骨文公司的一款关系…

【Python入门】Python循环语句(for循环的基础语法)

前言 Python循环语句 1. for循环的基础语法1.1 for循环1.2 程序中的for循环1.3 for循环语句1.4 for循环注意点1.5 总结1.6 练习案例&#xff1a;数一数有几个a 2. range语句2.1 range语句讲解2.2 for循环遍历range序列2.3 总结2.4 练习案例&#xff1a;有几个偶数 3. 变量作用域…

RFID软件:简介、功能和应用范围

在当今快节奏的商业环境中&#xff0c;RFID&#xff08;射频识别&#xff09;技术已经成为物流、供应链和库存管理等领域中不可或缺的工具。本文将向您介绍RFID软件的基本知识&#xff0c;探讨其功能和广泛应用的范围。 第一部分&#xff1a;RFID软件简介 RFID软件是一种应用…

【开源项目】SofaBoot实现Spring Bean 异步初始化的源码拆解

使用场景 在实际使用 Spring/Spring Boot 开发中&#xff0c;一些 Bean 在初始化过程中执行准备操作&#xff0c;如拉取远程配置、初始化数据源等等。在应用启动期间&#xff0c;这些 Bean 会增加 Spring 上下文刷新时间&#xff0c;导致应用启动耗时变长。 Demo展示 Spring…

苹果 Apple 发布的 AR 头显 Vision Pro 介绍

苹果今天凌晨的发布会&#xff0c;隆重推出了用了8 年时间研发的AR&#xff08;增强现实&#xff09;头戴显示器 Vision Pro。作为苹果 AR系列的最新成员&#xff0c;为用户带来了前所未有的沉浸式增强现实体验。 硬件 12个摄像头 &#xff0c;包括苹果首个 3D 相机&#xff0c…

【容器云架构】Calico 组件架构

Calico 组件 下图显示了 Kubernetes 的必需和可选 Calico 组件&#xff0c;具有网络和网络策略的本地部署。 Calico 组件 Calico API serverFelixBIRDconfdDikastesCNI pluginDatastore pluginIPAM pluginkube-controllersTyphacalicoctl 云编排器的插件 Plugins for cloud orc…

【vulnhub靶场】node 1

文章目录 前言开启靶机信息收集二层发现三层信息收集 攻击利用web信息收集权限提升后渗透 前言 描述&#xff1a;Node是一个中等级别的boot2root挑战&#xff0c;最初是为HackTheBox创建的。有两个标志可供查找&#xff08;用户和根标志&#xff09;和多种不同的技术可供使用。…

IDEA启动图片更改替换(2021.1/2022及其之后的版本)

目录 先说2022.1及其之后的版本: 2022.1之前的版本: 2022其他版本修改方法 最近一直在整理接口数据&#xff0c;盯屏幕太久了&#xff0c;然后打开IDEA突然感觉这个启动页面好刺眼&#xff0c;正好整理工作做完了&#xff0c;中午有空就找了下方法,发现了不少坑&#xff0c;…

项目管理中,如何减少项目风险?

我们公司&#xff0c;有一个项目已经做了一年多了&#xff0c;并且与客户进行了多次沟通&#xff0c;项目需求变更&#xff0c;范围扩大等&#xff0c;项目一直不能完成&#xff0c;客户生气&#xff0c;领导一直催&#xff0c;决定换一个项目经理把&#xff0c;领导让一个同事…

《vue 实践之 three.js 学习》

目录 three.js 学习包安装导包基础API学习Three.js 三要素【图文展示】 透视相机three.js 渲染器 之 WebGLRendererWebGLRenderer 实例化 three.js 学习 个人博客地址&#xff1a; 包安装 "three": "^0.153.0"命令&#xff1a;npm install --save three –…

模板初阶(C++)

目录 泛型编程 引入 模板 函数模板 函数模板的概念 函数模板格式 函数模板的原理 函数模板的实例化 隐式实例化 显式实例化 模板参数的匹配原则 类模板 类模板的定义格式 类模板的实例化 泛型编程 引入 我们在实际编写代码中&#xff0c;经常会遇到不同的类型需要实现同一种功…

使用纯C#语言实现4K图像平移显示性能的潜能测试

在介绍“熊猫视图.Net图形控件”系列文章中&#xff0c; 【“熊猫视图.Net图形控件”介绍链接】https://blog.csdn.net/mosangbike/article/details/126026801有对显示图像文件的测试结果&#xff0c;当时测试的不太严谨。今天抽时间详细测试了一下。 从网上找了一张Jpg图像作…

windows下安装配置 elasticsearch | kibana | analysis-ik

简介 elasticsearch是一款非常强大的开源搜索引擎&#xff0c;支持Restful风格&#xff0c;可以帮助我们从海量的数据中快速找到用户所需要的内容。是当前最流的开源企业级搜索引擎&#xff0c;能够达到近实时搜索、稳定、可靠、快速、安装使用方便。 elasticsearch结合kibana、…

wireshark使用-(2)运行时自动分包

现如今的网络通信分析基本都逃不开wireshark这个工具&#xff0c;而运行长时间的网络包往往过大&#xff0c;我们只想关注指定时间段的网络包&#xff0c;所以分包就显得尤为重要&#xff0c;好在wireshark工具自带这个功能&#xff0c;方便运行时能自动按时间&#xff0c;按大…

05.JavaWeb-Servlet(上)

目录 1.Servlet基础 1.1 Servlet概述 1.2 Servlet开发入门 1.2.1 Servlet接口及实现类 1.2.2实现Servlet程序 2.Servlet的请求与响应 2.1HttpServletRequest 2.1.1获取请求参数&#xff08;常用&#xff09; 2.1.2 获取请求方法 2.1.3获取与请求关联的会话对象 2.1.…

Vue总结

这里写自定义目录标题 一、Vue基本结介绍1、Vue 项目示例2、Vue 开发工具3、HTML 基本结构4、HTML 常用标签二、vue常用指令1、v-model 双向绑定a、v-model 修饰符2、插值3、条件渲染1、v-if 和 v-show 区别4、v-on 简介5、属性绑定6、 v-for 简介三、vue环境安装1、Vue 脚手架…