nodejs学习笔记:理解和使用path
理解path概念
路径有什么用
路径就像是计算机世界里的地址系统。就像我们在现实世界需要准确的地址来找到一家商店、一所学校或者一个朋友的家,计算机也需要路径来定位和管理它的资源。
例如我们在以下场景就离不开路径:
- 文件管理
- 软件安装和运行
- 网站开发,web应用,web资源
- 资源访问控制
- 系统配置
- 数据组织和备份
- 程序协同工作,不同模块,系统协作
相对路径和绝对路径
类比去问路:朝阳公园怎么走?(在地铁站内问)
路人指路方式:
- 绝对路径:北京市朝阳区xx街道xx号x门;
- 相对路径:出xx地铁站x口往北走xx米
类比计算机:
绝对路径:
- 总是从根目录开始(Windows 是盘符,Linux/Mac 是 /)
- 提供完整的位置信息
- 无论在哪里使用都指向同一个位置
相对路径:
- 相对于当前位置出发经过的路径
- 相对路径中的特殊符号:
windows vs. POSIX
windows和linux/unix系统的路径写法不同
- windows:
- 使用反斜杠
\\ - 环境变量:路径分隔符使用分号
; - 根目录使用盘符,比如
C:D: - 大小写不敏感
- linux/unix:
- 使用正斜杠
/ - 环境变量:路径分隔符使用冒号
: - 根目录使用正斜杠
/ - 大小写敏感
nodejs里的path
path常用的方法结合上面那张图看最佳
path.dirname(path)
返回当前所在目录名称
path.extname(path)
返回扩展名
path.join([…paths])
将路径片段组合在一起,会处理不同系统的路径分隔符,去除多余的分隔符,会标准化,也会解析
.和..的结果,返回最终标准的path上面的第一个例子就是解析过
..的例子,让我们一步步分析这个路径的构建过程:- 首先路径是:/foo
- 添加 bar,变成:/foo/bar
- 添加 baz/asdf,变成:/foo/bar/baz/asdf
- 添加 quux,变成:/foo/bar/baz/asdf/quux
- 最后遇到 ..,这告诉系统"返回上一级",所以删除了最后的 quux
path.normalize(path)
将路径标准化
path.parse(path)
将path解析成一个对象
“__dirname”当前文件所在的目录完整路径
举例说明:
process.cwd()获得当前工作目录
使用
process.cwd()可以获得当前目录,举例:但是要注意一个小陷阱:如果你从其他目录启动应用(比如 node src/main.js),process.cwd() 会返回你执行命令时所在的目录,而不是项目根目录。这就像你在不同的地方打开同一个应用,得到的"当前位置"是不同的。
在处理path时的最佳实践
1. 使用 path 模块而不是手动字符串操作
让我们看看为什么这很重要:
这样做的原因是:
- 自动处理不同操作系统的路径分隔符
- 处理多余的分隔符
- 提供更好的代码可读性
2. 使用相对路径时要小心
考虑这个场景:
原因:
- 相对路径依赖于当前工作目录 (process.cwd())
- 当应用从不同位置启动时可能会出错
- \_\_dirname 总是指向当前文件所在目录
3. 路径规范化和安全性
处理用户输入的路径时:
这样做可以:
- 防止路径遍历攻击
- 确保路径格式的一致性
- 限制访问范围在允许的目录内
4. 路径分割和解析
当需要处理路径的不同部分时:
5. 配置文件中的路径管理
在项目配置中处理路径:
6. 错误处理和日志记录
处理路径操作时的错误:
7. 环境变量和配置
处理不同环境下的路径:
这些最佳实践帮助我们:
- 提高代码的可维护性
- 增强安全性
- 确保跨平台兼容性
- 减少错误发生的可能性
- 使代码更容易测试和调试
