




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Nodejs基础:路径处理模块path总结模块概览在nodejs中,path是个使用频率很高,但却让人又爱又恨的模块。部分因为文档说的不够清晰,部分因为接口的平台差异性。将path的接口按照用途归类,仔细琢磨琢磨,也就没那么费解了。获取路径/文件名/扩展名获取路径:path.dirname(filepath)获取文件名:path.basename(filepath)获取扩展名:path.extname(filepath)获取所在路径例子如下:var path = require(path);var filepath = /tmp/demo/js/test.js;/ 输出:/tmp/demo/jsconsole.log( path.dirname(filepath) );获取文件名严格意义上来说,path.basename(filepath) 只是输出路径的最后一部分,并不会判断是否文件名。但大部分时候,我们可以用它来作为简易的“获取文件名“的方法。var path = require(path);/ 输出:test.jsconsole.log( path.basename(/tmp/demo/js/test.js) );/ 输出:testconsole.log( path.basename(/tmp/demo/js/test/) );/ 输出:testconsole.log( path.basename(/tmp/demo/js/test) );如果只想获取文件名,单不包括文件扩展呢?可以用上第二个参数。/ 输出:testconsole.log( path.basename(/tmp/demo/js/test.js, .js) );获取文件扩展名简单的例子如下:var path = require(path);var filepath = /tmp/demo/js/test.js;/ 输出:.jsconsole.log( path.extname(filepath) );更详细的规则是如下:(假设 path.basename(filepath) = B )从B的最后一个.开始截取,直到最后一个字符。如果B中不存在.,或者B的第一个字符就是.,那么返回空字符串。直接看官方文档的例子path.extname(index.html)/ returns .htmlpath.extname(index.coffee.md)/ returns .mdpath.extname(index.)/ returns .path.extname(index)/ returns path.extname(.index)/ returns 路径组合path.join(.paths)path.resolve(.paths)path.join(.paths)把paths拼起来,然后再normalize一下。这句话反正我自己看着也是莫名其妙,可以参考下面的伪代码定义。例子如下:var path = require(path);/ 输出 /foo/bar/baz/asdfpath.join(/foo, bar, baz/asdf, quux, .);path定义的伪代码如下:module.exports.join = function() var paths = Atotye.slice.call(arguments, 0); return this.normalize( paths.join(/) );path.resolve(.paths)这个接口的说明有点啰嗦。你可以想象现在你在shell下面,从左到右运行一遍cd path命令,最终获取的绝对路径/文件名,就是这个接口所返回的结果了。比如 path.resolve(/foo/bar, ./baz) 可以看成下面命令的结果cd /foo/barcd ./baz更多对比例子如下:var path = require(path);/ 假设当前工作路径是 /Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path/ 输出 /Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-pathconsole.log( path.resolve() )/ 输出 /Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-pathconsole.log( path.resolve(.) )/ 输出 /foo/bar/bazconsole.log( path.resolve(/foo/bar, ./baz) );/ 输出 /foo/bar/bazconsole.log( path.resolve(/foo/bar, ./baz/) );/ 输出 /tmp/fileconsole.log( path.resolve(/foo/bar, /tmp/file/) );/ 输出 /Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path/www/js/mod.jsconsole.log( path.resolve(www, js/upload, ./mod.js) );路径解析path.parse(path)path.normalize(filepath)从官方文档的描述来看,path.normalize(filepath) 应该是比较简单的一个API,不过用起来总是觉得没底。为什么呢?API说明过于简略了,包括如下:如果路径为空,返回.,相当于当前的工作路径。将对路径中重复的路径分隔符(比如linux下的/)合并为一个。对路径中的.、.进行处理。(类似于shell里的cd .)如果路径最后有/,那么保留该/。感觉stackoverflow上一个兄弟对这个API的解释更实在,原文链接。In other words, path.normalize is What is the shortest path I can take that will take me to the same place as the input代码示例如下。建议读者把代码拷贝出来运行下,看下实际效果。var path = require(path);var filepath = /tmp/demo/js/test.js;var index = 0;var compare = function(desc, callback) console.log(用例%d:%s, +index, desc); callback(); console.log(n);compare(路径为空, function() / 输出 . console.log( path.normalize() ););compare(路径结尾是否带/, function() / 输出 /tmp/demo/js/upload console.log( path.normalize(/tmp/demo/js/upload) ); / /tmp/demo/js/upload/ console.log( path.normalize(/tmp/demo/js/upload/) ););compare(重复的/, function() / 输出 /tmp/demo/js console.log( path.normalize(/tmp/demo/js) ););compare(路径带., function() / 输出 /tmp/demo/js console.log( path.normalize(/tmp/demo/js/upload/.) ););compare(相对路径, function() / 输出 demo/js/upload/ console.log( path.normalize(./demo/js/upload/) ); / 输出 demo/js/upload/ console.log( path.normalize(demo/js/upload/) ););compare(不常用边界, function() / 输出 . console.log( path.normalize(./.) ); / 输出 . console.log( path.normalize(.) ); / 输出 ./ console.log( path.normalize(./) ); / 输出 / console.log( path.normalize(/./) ); / 输出 / console.log( path.normalize(/.) ););感兴趣的可以看下 path.normalize(filepath) 的node源码如下:传送门文件路径分解/组合path.format(pathObject):将pathObject的root、dir、base、name、ext属性,按照一定的规则,组合成一个文件路径。path.parse(filepath):path.format()方法的反向操作。我们先来看看官网对相关属性的说明。首先是linux下 dir base root name ext / home/user/dir / file .txt (all spaces in the line should be ignored - they are purely for formatting)然后是windows下 dir base root name ext C: pathdir file .txt (all spaces in the line should be ignored - they are purely for formatting)P(pathObject)阅读相关API文档说明后发现,path.format(pathObject)中,pathObject的配置属性是可以进一步精简的。根据接口的描述来看,以下两者是等价的。root vs dir:两者可以互相替换,区别在于,路径拼接时,root后不会自动加/,而dir会。base vs name+ext:两者可以互相替换。var path = require(path);var p1 = path.format( root: /tmp/, base: hello.js);console.log( p1 ); / 输出 /tmp/hello.jsvar p2 = path.format( dir: /tmp, name: hello, ext: .js);console.log( p2 ); / 输出 /tmp/hello.jspath.parse(filepath)path.format(pathObject) 的反向操作,直接上官网例子。四个属性,对于使用者是挺便利的,不过path.format(pathObject) 中也是四个配置属性,就有点容易搞混。path.parse(/home/user/dir/file.txt)/ returns/ / root : /,/ dir : /home/user/dir,/ base : file.txt,/ ext : .txt,/ name : file/ 获取相对路径接口:path.relative(from, to)描述:从from路径,到to路径的相对路径。边界:如果from、to指向同个路径,那么,返回空字符串。如果from、to中任一者为空,那么,返回当前工作路径。上例子:var path = require(path);var p1 = path.relative(/data/orandea/test/aaa, /data/orandea/impl/bbb);console.log(p1); / 输出 ././impl/bbbvar p2 = path.relative(/data/demo, /data/demo);console.log(p2); / 输出 var p3 = path.relative(/data/demo, );console.log(p3); / 输出 ././Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path平台相关接口/属性以下属性、接口,都跟平台的具体实现相关。也就是说,同样的属性、接口,在不同平台上的表现不同。path.posix:path相关属性、接口的linux实现。path.win32:path相关属性、接口的win32实现。path.sep:路径分隔符。在linux上是/,在windows上是。p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 临床辩证考试题目及答案2025年版
- 2025年特色农产品深加工技术创新与区域经济发展研究报告
- 2025餐馆进货合同模板
- 2025年儿童学前教育试卷及答案
- 年产办公家具10万套酒店家具12万套新建项目环评报告表
- 2025年长水机场地勤考试试题及答案
- 松芝股份:厦门金龙汽车空调有限公司股东全部权益价值资产评估报告
- 湖南发展:湖南新邵筱溪水电开发有限责任公司股东全部权益价值资产评估报告
- 2025年大二数学真题试卷及答案
- 销售工程师培训方案(3篇)
- 人工智能教育应用研究综述
- 生殖内分泌学
- 驾校教练员培训课件
- 冠寓公寓运营管理手册
- 人工智能 第2版 课件 AI12类脑智能
- 带状疱疹的中医护理方案
- 民谣酒馆项目融资计划书
- 新概念张云生讲解的笔记
- 大班数学《年妈妈的故事》课件
- 知情同意书模板(新闻采访)
- 恶性肿瘤中医诊疗指南
评论
0/150
提交评论