node 学习笔记 - path 处理
本文同步自我的个人博客: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.posix
和 path.win32
他们都包含上面这些方法属性,前者跨平台,后者只是win上。
不知道为什么要单独搞两个这样的属性。
好了,争取每天学习一点基础,只有把这些基础知识梳理一遍,才能更好的掌握 node。
node 学习笔记 - path 处理的更多相关文章
- node学习笔记(二)(ajax方式向node后台提交数据)
通过ajax向node后台提交数据过程(附手写前后台代码),并总结post与get的区别 POST 前台代码 //CSS简单给点样式 <style> form{ width: 200px; ...
- node学习笔记第一天
ES6---* JavaScript语言随着使用的人越来越多,ECMA语法规范:if/else* 为了让js语言更适应大型应用的开发.旨在消除一些怪异的行为 ### 包含内容(strict严格模式)- ...
- Nodejs全站开发学习系列 & 深入浅出Node学习笔记 & Spider抓取
https://course.tianmaying.com/node 这个系列的文章看起来很不错,值得学习一下. /Users/baidu/Documents/Data/Interview/Web-S ...
- node.学习笔记(关于http2的讲解)
个人总结:读完这篇文章需要30分钟 http2部分很有学习价值,可以好好看. 用node搭建TCP服务器 用node搭建HTTP服务器 用node文件fs模块对文件读取,并用流的方式写入 用url路 ...
- Node学习笔记(四):gulp+express+io.socket部署angularJs2(填坑篇)
这篇就先暂停下上篇博客--你画我猜的进度,因为在做这个游戏的时候,想采用最新的ng2技术,奈何坑是一片又一片,这边就先介绍下环境部署和填坑史 既然要用ng2,首先要拿到资源,我这边用的是angular ...
- Node学习笔记(三):基于socket.io web版你画我猜(一)
经过惨淡的面试,也是知道了自己的不足,刚好最近在学习node,心中便有了做一个web版的你画我猜的想法 首先说下思路,在做准备工作的时候,有两个大概的思路: 1.规定一块div,捕捉鼠标事件,动态生成 ...
- Node学习笔记(一):stream流操作
NodeJs中谈及较多的可能就是Stream模块了,先写一个简单的ajax回调 $.post("index.php",{data:'aaa',order:'ccc'},functi ...
- node学习笔记
一.准备(github地址) 什么是Javascript? ... Javascript能做什么? ..... 浏览器中的Javascript可以做什么? 操作DOM(增删改查) AJAX/跨域 BO ...
- node学习笔记(四)
//Node.js标准库提供了http模块,其中封装了一个高效的http服务器和一个简易的http客户端 //http.Server是一个基于事件的HTTP服务器,它的核心由Node.js下层c++部 ...
随机推荐
- cdh集群数据恢复
CDH 数据库 磁盘坏了 所有集群配置 都没了 而且 还没备份 .... 元数据 还在 cdh 软件配置 和 安装软件 不能用了 下载 apache hadoop 重新配置 ...
- OOP应用:实体类
实体类 定义:实体类是一个业务实体的类,而业务实体就是整个软件系统业务所涉及的对象. 使用: 1.新增实体类项目,增加类库项目,以.Modes作为后缀. 2.抽取对象以及属性.(简单地说,对象就是每个 ...
- 0014 Java学习笔记-集合-HashMap集合
主要的方法 + 构造方法: * HashMap(); - 默认大小16,负载因子0.75 * HashMap(int initialCapacity); * HashMap(int initialCa ...
- Boost.log
=================================版权声明================================= 版权声明:本文为博主原创文章 未经许可不得转载 请通过右 ...
- 使用SQL检测死锁
第一步:首先创建两个测试表,表goods_sort和goods 表goods_sort:创建并写入测试数据 IF EXISTS(SELECT name FROM sysobjects WHERE na ...
- Android Paint类方法说明
* Paint类介绍 * * Paint即画笔,在绘图过程中起到了极其重要的作用,画笔主要保存了颜色, * 样式等绘制信息,指定了如何绘制文本和图形,画笔对象有很多设置方法, * 大体上可以分为两类, ...
- js中的继承
js中继承的实现方式很多,此处给出两种常用方式. <!DOCTYPE html> <html> <head> <meta charset='UTF-8'> ...
- java 重载、重写、构造函数详解
方法重写 1.重写只能出现在继承关系之中.当一个类继承它的父类方法时,都有机会重写该父类的方法.一个特例是父类的方法被标识为final.重写的主要优点是能够定义某个子类型特有的行为. class An ...
- Arch Linux sudo: PAM authentication error: Module is unknown [Solved!]
问题描述: 我的 Arch Linux 已经用了快半年多,由于 Arch Linux 的滚挂问题,我从没有直接升级过系统.软件版本以及库自然落后了一些. 就在我准备需要用到 NFS 时,挂载网络文件系 ...
- LINUX下NFS系统的安装配置
准备:NFS系统服务器IP 192.168.135.1 ,NFS共享目录/mnt/NFS 一.安装NFS 查看nfs是否安装 #rpm -qa | grep nfs 若没有则安装nfs包 #yum i ...