




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Nodejs基础:路径处理模块path总结在nodejs中,path是个使用频率很高,但却让人又爱又恨的模块。部分因为文档说的不够清晰,部分因为接口的平台差异性。作者:程序猿小卡_casper来源:segmentfault|2016-11-14 20:28收藏 分享 模块概览在nodejs中,path是个使用频率很高,但却让人又爱又恨的模块。部分因为文档说的不够清晰,部分因为接口的平台差异性。将path的接口按照用途归类,仔细琢磨琢磨,也就没那么费解了。获取路径/文件名/扩展名 获取路径:path.dirname(filepath) 获取文件名:path.basename(filepath) 获取扩展名:path.extname(filepath)获取所在路径例子如下:1. varpath=require(path);2. varfilepath=/tmp/demo/js/test.js;3. 4. /输出:/tmp/demo/js5. console.log(path.dirname(filepath);获取文件名严格意义上来说,path.basename(filepath) 只是输出路径的最后一部分,并不会判断是否文件名。但大部分时候,我们可以用它来作为简易的“获取文件名“的方法。1. varpath=require(path);2. 3. /输出:test.js4. console.log(path.basename(/tmp/demo/js/test.js);5. 6. /输出:test7. console.log(path.basename(/tmp/demo/js/test/);8. 9. /输出:test10. console.log(path.basename(/tmp/demo/js/test);如果只想获取文件名,单不包括文件扩展呢?可以用上第二个参数。1. /输出:test2. console.log(path.basename(/tmp/demo/js/test.js,.js);获取文件扩展名简单的例子如下:1. varpath=require(path);2. varfilepath=/tmp/demo/js/test.js;3. 4. /输出:.js5. console.log(path.extname(filepath);更详细的规则是如下:(假设 path.basename(filepath) = B ) 从B的最后一个.开始截取,直到最后一个字符。 如果B中不存在.,或者B的第一个字符就是.,那么返回空字符串。直接看官方文档的例子1. path.extname(index.html)2. /returns.html3. 4. path.extname(index.coffee.md)5. /returns.md6. 7. path.extname(index.)8. /returns.9. 10. path.extname(index)11. /returns12. 13. path.extname(.index)14. /returns路径组合 path.join(.paths) path.resolve(.paths)path.join(.paths)把paths拼起来,然后再normalize一下。这句话反正我自己看着也是莫名其妙,可以参考下面的伪代码定义。例子如下:1. varpath=require(path);2. 3. /输出/foo/bar/baz/asdf4. path.join(/foo,bar,baz/asdf,quux,.);path定义的伪代码如下:1. module.exports.join=function()2. varpaths=Atotye.slice.call(arguments,0);3. returnthis.normalize(paths.join(/);4. ;path.resolve(.paths)这个接口的说明有点啰嗦。你可以想象现在你在shell下面,从左到右运行一遍cd path命令,最终获取的绝对路径/文件名,就是这个接口所返回的结果了。比如 path.resolve(/foo/bar, ./baz) 可以看成下面命令的结果1. cd/foo/bar2. cd./baz更多对比例子如下:1. varpath=require(path);2. 3. /假设当前工作路径是/Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path4. 5. /输出/Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path6. console.log(path.resolve()7. 8. /输出/Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path9. console.log(path.resolve(.)10. 11. /输出/foo/bar/baz12. console.log(path.resolve(/foo/bar,./baz);13. 14. /输出/foo/bar/baz15. console.log(path.resolve(/foo/bar,./baz/);16. 17. /输出/tmp/file18. console.log(path.resolve(/foo/bar,/tmp/file/);19. 20. /输出/Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path/www/js/mod.js21. console.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代码示例如下。建议读者把代码拷贝出来运行下,看下实际效果。1. varpath=require(path);2. varfilepath=/tmp/demo/js/test.js;3. 4. varindex=0;5. 6. varcompare=function(desc,callback)7. console.log(用例%d:%s,+index,desc);8. callback();9. console.log(n);10. ;11. 12. compare(路径为空,function()13. /输出.14. console.log(path.normalize();15. );16. 17. compare(路径结尾是否带/,function()18. /输出/tmp/demo/js/upload19. console.log(path.normalize(/tmp/demo/js/upload);20. 21. /tmp/demo/js/upload/22. console.log(path.normalize(/tmp/demo/js/upload/);23. );24. 25. compare(重复的/,function()26. /输出/tmp/demo/js27. console.log(path.normalize(/tmp/demo/js);28. );29. 30. compare(路径带.,function()31. /输出/tmp/demo/js32. console.log(path.normalize(/tmp/demo/js/upload/.);33. );34. 35. compare(相对路径,function()36. /输出demo/js/upload/37. console.log(path.normalize(./demo/js/upload/);38. 39. /输出demo/js/upload/40. console.log(path.normalize(demo/js/upload/);41. );42. 43. compare(不常用边界,function()44. /输出.45. console.log(path.normalize(./.);46. 47. /输出.48. console.log(path.normalize(.);49. 50. /输出./51. console.log(path.normalize(./);52. 53. /输出/54. console.log(path.normalize(/./);55. 56. /输出/57. console.log(path.normalize(/.);58. );感兴趣的可以看下 path.normalize(filepath) 的node源码如下:传送门文件路径分解/组合 path.format(pathObject):将pathObject的root、dir、base、name、ext属性,按照一定的规则,组合成一个文件路径。 path.parse(filepath):path.format()方法的反向操作。我们先来看看官网对相关属性的说明。首先是linux下1. 2. dirbase3. 4. rootnameext5. /home/user/dir/file.txt6. 7. (allspacesinthelineshouldbeignored-theyarepurelyforformatting)然后是windows下1. 2. dirbase3. 4. rootnameext5. C:pathdirfile.txt6. 7. (allspacesinthelineshouldbeignored-theyarepurelyforformatting)path.format(pathObject)阅读相关API文档说明后发现,path.format(pathObject)中,pathObject的配置属性是可以进一步精简的。根据接口的描述来看,以下两者是等价的。 root vs dir:两者可以互相替换,区别在于,路径拼接时,root后不会自动加/,而dir会。 base vs name+ext:两者可以互相替换。1. varpath=require(path);2. 3. varp1=path.format(4. root:/tmp/,5. base:hello.js6. );7. console.log(p1);/输出/tmp/hello.js8. 9. varp2=path.format(10. dir:/tmp,11. name:hello,12. ext:.js13. );14. console.log(p2);/输出/tmp/hello.jspath.parse(filepath)path.format(pathObject) 的反向操作,直接上官网例子。四个属性,对于使用者是挺便利的,不过path.format(pathObject) 中也是四个配置属性,就有点容易搞混。1. path.parse(/home/user/dir/file.txt)2. /returns3. /4. /root:/,5. /dir:/home/user/dir,6. /base:file.txt,7. /ext:.txt,8. /name:file9. /获取相对路径接口:path.relative(from, to)描述:从from路径,到to路径的相对路径。边界: 如果from、to指向同个路径,那么,返回空字符串。 如果from、to中任一者为空,那么,返回当前工作路径。上例子:1. varpath=require(path);2. 3. varp1=path.relative(/data/orandea/test/aaa,/data/orandea/impl/bbb);4. console.log(p1);/输出././impl/bbb5. 6. varp2=path.relative(/data/demo,/data/demo);7. console.log(p2);/输出8. 9. varp3=path.relative(/data/demo,);10. 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上是。 path.delimiter:path设置的分割符。linux上是:,windows上是;。注意,当使用 path.win32 相关接口时,参数同样可以使用/做分隔符,但接口返回值的分割符只会是。直接来例子更直观。1.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物理基础考试试题及答案
- java路由配置方法面试题及答案
- 赌博知识考试题及答案
- 2025年河南省中考语文真题(含答案)
- 石油测井考试题及答案
- 长春燃气考试题及答案
- 函数极限试题及答案
- 货币知识测试题及答案
- 手卫生院感考试试题及答案
- 校园业务知识培训内容课件
- 部编小学语文单元作业设计五年级上册第二单元
- 企业社会责任报告模板
- 25题后期-剪辑-特效岗位常见面试问题含HR问题考察点及参考回答
- 2024年辽宁交投集团招聘笔试参考题库附带答案详解
- 高考英语必背1500个真题高频词汇- 高考英语一轮复习
- 人体足解剖学
- 机械基础 第三版 课件 (郁志纯)模块三 机械零件的精度
- 环境监测仪器设备采购投标方案(技术标)
- 【食品零食】桂格燕麦食品抖音账号运营方案
- 食材供应服务投标方案(完整技术标)
- 诺丁山-Notting-Hill-中英文剧本
评论
0/150
提交评论