本文同步自我的个人博客:http://www.52cik.com/2015/12/04/learn-node-path.html

path 模块是 node 用于整理、转换、合并路径的神器,只要是路径问题,都可以交给它处理。

但它仅仅是处理路径字符串,而不会去坚持或处理文件。

path.normalize 路径整理

做项目时,往往都是基于相对路径,于是经常会出现类似这样的路径 path//upload/../file/./123.jpg

当然这个是把所有坑都写到一起了,不过就算这样的路径,path.normalize 分分钟搞定。

var path = require('path');

var str = path.normalize('./path//upload/data/../file/./123.jpg');
console.log(str); // path/upload/file/123.jpg

path.join 拼接路径

那些奇葩路径往往都是自己拼接导致的,如果用一些工具帮助我们处理这,就可以直接得到规范的路径了,而且不需要担心跨平台问题。这里的 path.join 就可以帮助我们生产跨平台,规范化的路径字符串。

var path = require('path');

var str = path.join('./path/./', './upload', '/file', '123.jpg');
console.log(str); // path/upload/file/123.jpg var str = path.join('path', 'upload', 'file', '123.jpg');
console.log(str); // path/upload/file/123.jpg var arr = ['path', 'upload', 'file', '123.jpg'];
var str = path.join.apply(null, arr);
console.log(str); // path/upload/file/123.jpg

这个方法虽然方便,但是参数只能是字符串,否则会抛出错误(0.10以上版本)。

path.resolve 绝对路径

这个绝对路径操作,跟上面的不太一样,如果你懂命令行 cd 命令,那就秒懂了,否则需要花点时间多跑几个例子才能理解。这次直接上官方例子。

path.resolve('foo/bar', '/tmp/file/', '..', 'a/../subfile');
// 返回 /tmp/subfile

相当于命令行下的

cd foo/bar
cd /tmp/file/
cd ..
cd a/../subfile
pwd

他的解析不是在是简单的拼接关系,而是类似 cd 命令的解析了。

path.relative 相对路径

有绝对就有相对,有时我们有两个绝对路径, 我们需要从中找出相对目录的起源目录。

path.relative('/data/orandea/test/aaa', '/data/orandea/impl/bbb')
// 返回 ../../impl/bbb

path.dirname 文件路径

根据一个文件或目录得到它所在的目录路径,这个很常用。

var path = require('path');

var str = path.dirname('path/upload/file/123.jpg');
console.log(str); // path/upload/file var str = path.dirname(__filename); // 等价于 __dirname
console.log(str, __dirname); // 当前文件所在目录

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

确切的说是返回最后一个路径分割后面的文件名,不论是文件还是目录,第二个参数可以忽略文件后缀。

var path = require('path');

var str = path.basename('path/upload/file/123.txt.jpg');
console.log(str); // 123.txt.jpg var str = path.basename('path/upload/file/123.txt.jpg', '.jpg');
console.log(str); // 123.txt var str = path.basename('path/upload/file/123.txt.jpg', '.txt.jpg');
console.log(str); // 123 var str = path.basename('path/upload/file/');
console.log(str); // file

代码都是简单易懂的。

path.extname 文件后缀

确切说,就是返回最后一个 . 之后的字符串,没有则返回空。

var path = require('path');

var str = path.extname('path/upload/file/123.txt.jpg');
console.log(str); // '.jpg' var str = path.extname('path/upload/file/123.txt');
console.log(str); // '.txt' var str = path.extname('path/upload/file/');
console.log(str); // ''

path.parse 解析路径

把一个路径解析为一个 {root:'', dir:'', base:'', ext:'', name:''} 这样的对象。

有时候要获取文件名,文件后缀,文件目录,这样到省事了,直接搞定。上官方例子。

path.parse('/home/user/dir/file.txt')
// returns
{
root : "/",
dir : "/home/user/dir",
base : "file.txt",
ext : ".txt",
name : "file"
} // windows
path.parse('C:\\path\\dir\\index.html')
// returns
{
root : "C:\\",
dir : "C:\\path\\dir",
base : "index.html",
ext : ".html",
name : "index"
}

path.format 生成路径

正好跟 path.parse 相反,这个则是根据 {root:'', dir:'', base:'', ext:'', name:''} 这样的对象来生成字符串。上官方例子。

path.format({
root : "/",
dir : "/home/user/dir",
base : "file.txt",
ext : ".txt",
name : "file"
})
// returns
'/home/user/dir/file.txt'

其他属性

还有一些属性,如 path.sep 不同平台下的文件路径分隔符,win 是 \\,*nix 则是 /

path.delimiter 字面解释,这才是分隔符,但这个往往是环境变量中出现的,win 是 ;,*nix 则是 :,你们懂的。

还有两个奇葩属性,path.posixpath.win32 他们都包含上面这些方法属性,前者跨平台,后者只是win上。

不知道为什么要单独搞两个这样的属性。

好了,争取每天学习一点基础,只有把这些基础知识梳理一遍,才能更好的掌握 node。

node 学习笔记 - path 处理的更多相关文章

  1. node学习笔记(二)(ajax方式向node后台提交数据)

    通过ajax向node后台提交数据过程(附手写前后台代码),并总结post与get的区别 POST 前台代码 //CSS简单给点样式 <style> form{ width: 200px; ...

  2. node学习笔记第一天

    ES6---* JavaScript语言随着使用的人越来越多,ECMA语法规范:if/else* 为了让js语言更适应大型应用的开发.旨在消除一些怪异的行为 ### 包含内容(strict严格模式)- ...

  3. Nodejs全站开发学习系列 & 深入浅出Node学习笔记 & Spider抓取

    https://course.tianmaying.com/node 这个系列的文章看起来很不错,值得学习一下. /Users/baidu/Documents/Data/Interview/Web-S ...

  4. node.学习笔记(关于http2的讲解)

    个人总结:读完这篇文章需要30分钟 http2部分很有学习价值,可以好好看.  用node搭建TCP服务器 用node搭建HTTP服务器 用node文件fs模块对文件读取,并用流的方式写入 用url路 ...

  5. Node学习笔记(四):gulp+express+io.socket部署angularJs2(填坑篇)

    这篇就先暂停下上篇博客--你画我猜的进度,因为在做这个游戏的时候,想采用最新的ng2技术,奈何坑是一片又一片,这边就先介绍下环境部署和填坑史 既然要用ng2,首先要拿到资源,我这边用的是angular ...

  6. Node学习笔记(三):基于socket.io web版你画我猜(一)

    经过惨淡的面试,也是知道了自己的不足,刚好最近在学习node,心中便有了做一个web版的你画我猜的想法 首先说下思路,在做准备工作的时候,有两个大概的思路: 1.规定一块div,捕捉鼠标事件,动态生成 ...

  7. Node学习笔记(一):stream流操作

    NodeJs中谈及较多的可能就是Stream模块了,先写一个简单的ajax回调 $.post("index.php",{data:'aaa',order:'ccc'},functi ...

  8. node学习笔记

    一.准备(github地址) 什么是Javascript? ... Javascript能做什么? ..... 浏览器中的Javascript可以做什么? 操作DOM(增删改查) AJAX/跨域 BO ...

  9. node学习笔记(四)

    //Node.js标准库提供了http模块,其中封装了一个高效的http服务器和一个简易的http客户端 //http.Server是一个基于事件的HTTP服务器,它的核心由Node.js下层c++部 ...

随机推荐

  1. Javascript之旅——第六站:看看writable特性

    说起js中的那些特性标记,总觉得有些怪怪的,那为什么要说到这个attribute,起源于对一个问题的疑问,我们都知道window对象其实就是 浏览器窗口的一个实例,既然是一个实例,那这个实例就应该有“ ...

  2. JAVA_OPTS

    JAVA_OPTS ,顾名思义,是用来设置JVM相关运行参数的变量. JVM:JAVA_OPTS="-server -Xms2048m -Xmx2048m -Xss512k" -s ...

  3. Oracle 常用SQL技巧(转)

    1. SELECT子句中避免使用 “*”当你想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用 ‘*’ 是一个方便的方法.不幸的是,这是一个非常低效的方法. 实际上,ORACLE在解 ...

  4. Linux指令备忘

    这是之前初学Linux时做下的笔记,根据现在的熟悉程度增删了一些,也是做上备份查看,希望能让有用的童鞋参考一二. //将使用到的内容输出到屏幕,仅检查语法 sh -nx scripts.sh //输出 ...

  5. 【转】input输入框中光标高度的变化问题

    原文地址:http://blog.csdn.net/luochao_tj/article/details/17755457 input[type='text']文本框光标高度在有输入内容和为空时发生很 ...

  6. 关于TreeView的选中事件

    在使用TreeView的选中事件时,发现,SelectAfter在第一次选中时触发,你再次点击时这个事件并不能引发它.所以找了找,发现有另两种解决办法. 最好的就是使用:NodeMouseClick, ...

  7. python 笔记(一) —— 不要误用 ++i、--i

    ilocker:关注 Android 安全(新手) QQ: 2597294287 在 python 中也可以写 ++i,但含义完全不同于 c/c++.python 的 ++i 并不是将 i 自增 1, ...

  8. 理解 OpenStack + Ceph (2):Ceph 的物理和逻辑结构 [Ceph Architecture]

    本系列文章会深入研究 Ceph 以及 Ceph 和 OpenStack 的集成: (1)安装和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和逻辑结构 (4)Ceph 的基础数据结构 ...

  9. Quantum Bogo sort浅谈

    1.普通的猴子排序(bogo sort) 猴子排序百科 en.wikipedia.org/wiki/Bogosort 不停的随机打乱序列,然后检查,直到排好序 复杂度O(n*n!) while not ...

  10. jprofiler安装图解

    环境: 1.sun jdk1.6.0 2.jprofiler_windows_6_0_2.exe 安装 1. jdk, 安装略... 2. jprofiler安装 一路next 到Enter lice ...