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

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截图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值