【Node.js入门笔记9---path 模块】

news/2025/3/25 22:21:17/

Node.js入门笔记9

  • Node.js---path 模块
  • 一、核心功能
    • 0.学习path的前提
    • 1. 使用 path.join() 安全拼接路径
    • 2. path.resolve(),路径解析(绝对路径)
    • 3. 路径信息提取
    • 4. 路径规范化
  • 二、跨平台关键点
    • 1. 路径分隔符
    • 2. 环境变量分隔符
    • 3. 路径格式解析
    • 4. 路径格式重组
  • 三、与 __dirname 和 __filename 的关系
  • 四、实用场景示例
  • 五、总结表

Node.js—path 模块

Node.js 中的 path 模块是处理文件路径的核心工具,专门用于跨平台路径操作。它可以帮助你解决路径拼接、解析、规范化等问题,避免手动处理路径分隔符(/ 或 \)带来的兼容性问题。以下是系统学习指南:

一、核心功能

0.学习path的前提

如果要在 JavaScript 代码中,使用 path模块来操作文件,则需要使用如下的方式先导入它:

const path = require('path');

1. 使用 path.join() 安全拼接路径

语法格式:

const fullPath = path.join('src', 'assets', 'image.jpg');
// Windows: 'src\assets\image.jpg'
// Linux/macOS: 'src/assets/image.jpg'

2. path.resolve(),路径解析(绝对路径)

语法格式:

// 将相对路径解析为绝对路径
const absolutePath = path.resolve('src', 'app.js');
// 假设当前目录是 /home/user/project,则结果为:
// /home/user/project/src/app.js

3. 路径信息提取

语法格式:

const filePath = '/home/user/project/src/app.js';console.log(path.basename(filePath)); // 'app.js'(文件名)
console.log(path.dirname(filePath));  // '/home/user/project/src'(目录)
console.log(path.extname(filePath));  // '.js'(扩展名)

4. 路径规范化

语法格式:

// 处理冗余的路径符号(如 .. 或 .)
path.normalize('/foo/bar//baz/asdf/..'); 
// 结果:'/foo/bar/baz'

二、跨平台关键点

1. 路径分隔符

语法格式:

console.log(path.sep); // 输出当前系统的分隔符(Windows 是 `\`,其他是 `/`)

2. 环境变量分隔符

1.fs.open():手动打开文件获取文件描述符。
语法格式:

console.log(path.delimiter); // Windows 是 `;`,其他是 `:`

2.fs.close():关闭文件描述符。
语法格式:

fs.close(fd, callback)

3. 路径格式解析

语法格式:

const parsed = path.parse('/home/user/file.txt');
// 返回:
// {
//   root: '/',
//   dir: '/home/user',
//   base: 'file.txt',
//   ext: '.txt',
//   name: 'file'
// }

4. 路径格式重组

语法格式:

const obj = { root: '/', name: 'file', ext: '.txt' };
path.format(obj); // '/file.txt'

三、与 __dirname 和 __filename 的关系

语法格式:

__dirname:当前文件所在目录的绝对路径
__filename:当前文件的绝对路径

常见误区
❌ 错误方式:

const badPath = __dirname + '/../assets/image.jpg'; // 跨平台可能出错

✅ 正确方式:

const goodPath = path.join(__dirname, '..', 'assets', 'image.jpg');

最佳实践:永远用 path.join(__dirname, …) 代替字符串拼接!

四、实用场景示例

场景1:安全读取配置文件

const configPath = path.join(__dirname, 'config', 'settings.json');
const config = require(configPath);

场景2:处理用户上传的文件路径

// 用户可能传入带有 ../ 的路径,使用 normalize 防御
const userInput = '../../secret.txt';
const safePath = path.normalize(path.join(__dirname, 'uploads', userInput));

场景3:动态生成多平台脚本

const scriptPath = path.join(process.cwd(), 'scripts', 'start.sh');

场景4:从一个文件路径中提取文件名(不带扩展名)和父目录

const filePath = '/usr/local/docs/report.pdf';const parentDir = path.dirname(filePath); // '/usr/local/docs'
const fileName = path.basename(filePath, path.extname(filePath)); // 'report'

五、总结表

node截图


http://www.ppmy.cn/news/1581257.html

相关文章

使用LangChain实现基于LLM和RAG的PDF问答系统

目录 前言一.大语言模型(LLM)1. 什么是LLM?2. LLM 的能力与特点 二、增强检索生成(RAG)三. 什么是 LangChain?1. LangChain 的核心功能2. LangChain 的优势3. LangChain 的应用场景4. 总结 四.使用 LangChain 实现基于 PDF 的问答系统 前言 本文将介绍 …

泰迪智能科技大模型开发平台与大模型应用平台介绍

大模型开发平台是一款面向高校大模型教学、科研的一站式大模型开发工具。平台能够自定义调用CPU和内存资源,自由配置专门针对大模型和深度学习等任务的硬件加速器(如GPU或XPU),能够高效地执行大模型的prompt工程、大模型应用开发和…

【Linux】浅谈环境变量和进程地址空间

一、环境变量 基本概念 环境变量(Environment Variables)是操作系统提供的一种机制,用于存储和传递配置信息、系统参数、用户偏好设置等。 环境变量的作用 配置程序行为: 程序可以通过环境变量获取配置信息,例如日…

vue3父子组件传值

在 Vue 3 中,Composition API 是一种新的编写组件逻辑的方式,它通过 setup 函数提供了一种更灵活的方式来组织和复用代码。与传统的 Options API 相比,Composition API 更适合处理复杂的逻辑场景,尤其是在需要跨组件复用逻辑时。 …

如何理解std::promise和std::future

std::promise 是 C11 引入的一个类,用于在线程之间传递异步结果(值或异常)。它通常与 std::future 配合使用,std::promise 用于设置值或异常,而 std::future 用于获取这些值或异常。 下面通过一个更直观的生产者-消费者…

红数码影视(RED Digital Cinema)存储卡格式化后的恢复方法

红数码影视(RED Digital Cinema)的摄像机可以生成两种RAW级高清视频文件,一种是R3D,一种是MOV。其中MOV属于苹果(apple)公司的QT视频封装结构,使用的视频编码是Apple ProRes;而R3D则是RED公司自创的RAW视频文件,这种文件解码需要使…

Excel(进阶篇):powerquery详解、PowerQuery的各种用法,逆透视表格、双行表头如何制作透视表、不规则数据如何制作数据透视表

目录 PowerQuery工具基础修改现有数据理规则PowerQuery抓取数据的两种方式多文件合并透视不同表结构多表追加数据透视追加与合并整理横向表格:逆透视 数据用拆分工具整理数据算账龄 不等步长值组合合并文件夹中所有文件PowerQuery处理CSV文件双行表头、带合并单元格如何做数据…

在 Spring Boot 结合 MyBatis 的项目中,实现字段脱敏(如手机号、身份证号、银行卡号等敏感信息的部分隐藏)可以通过以下方案实现

在 Spring Boot 结合 MyBatis 的项目中,实现字段脱敏(如手机号、身份证号、银行卡号等敏感信息的部分隐藏)可以通过以下方案实现。以下是分步说明和完整代码示例: 一、实现方案选择 1. 方案一:自定义注解 Jackson 序…