Nodejs基础路径处理模块path总结.docx

上传人:b****1 文档编号:231403 上传时间:2022-10-07 格式:DOCX 页数:9 大小:56.58KB
下载 相关 举报
Nodejs基础路径处理模块path总结.docx_第1页
第1页 / 共9页
Nodejs基础路径处理模块path总结.docx_第2页
第2页 / 共9页
Nodejs基础路径处理模块path总结.docx_第3页
第3页 / 共9页
Nodejs基础路径处理模块path总结.docx_第4页
第4页 / 共9页
Nodejs基础路径处理模块path总结.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

Nodejs基础路径处理模块path总结.docx

《Nodejs基础路径处理模块path总结.docx》由会员分享,可在线阅读,更多相关《Nodejs基础路径处理模块path总结.docx(9页珍藏版)》请在冰豆网上搜索。

Nodejs基础路径处理模块path总结.docx

Nodejs基础:

路径处理模块path总结

在nodejs中,path是个使用频率很高,但却让人又爱又恨的模块。

部分因为文档说的不够清晰,部分因为接口的平台差异性。

作者:

程序猿小卡_casper来源:

segmentfault|2016-11-1420:

28

 收藏

  分享

模块概览

在nodejs中,path是个使用频率很高,但却让人又爱又恨的模块。

部分因为文档说的不够清晰,部分因为接口的平台差异性。

将path的接口按照用途归类,仔细琢磨琢磨,也就没那么费解了。

获取路径/文件名/扩展名

·获取路径:

path.dirname(filepath)

·获取文件名:

path.basename(filepath)

·获取扩展名:

path.extname(filepath)

获取所在路径

例子如下:

1.var path = require('path'); 

2.var filepath = '/tmp/demo/js/test.js'; 

3. 

4.// 输出:

/tmp/demo/js 

5.console.log( path.dirname(filepath) );  

获取文件名

严格意义上来说,path.basename(filepath)只是输出路径的最后一部分,并不会判断是否文件名。

但大部分时候,我们可以用它来作为简易的“获取文件名“的方法。

1.var path = require('path'); 

2. 

3.// 输出:

test.js 

4.console.log( path.basename('/tmp/demo/js/test.js') ); 

5. 

6.// 输出:

test 

7.console.log( path.basename('/tmp/demo/js/test/') ); 

8. 

9.// 输出:

test 

10.console.log( path.basename('/tmp/demo/js/test') );  

如果只想获取文件名,单不包括文件扩展呢?

可以用上第二个参数。

1.// 输出:

test 

2.console.log( path.basename('/tmp/demo/js/test.js', '.js') );  

获取文件扩展名

简单的例子如下:

1.var path = require('path'); 

2.var filepath = '/tmp/demo/js/test.js'; 

3. 

4.// 输出:

.js 

5.console.log( path.extname(filepath) );  

更详细的规则是如下:

(假设path.basename(filepath)===B)

·从B的最后一个.开始截取,直到最后一个字符。

·如果B中不存在.,或者B的第一个字符就是.,那么返回空字符串。

直接看官方文档的例子

1.path.extname('index.html') 

2.// returns '.html' 

3. 

4.path.extname('index.coffee.md') 

5.// returns '.md' 

6. 

7.path.extname('index.') 

8.// returns '.' 

9. 

10.path.extname('index') 

11.// returns '' 

12. 

13.path.extname('.index') 

14.// returns ''  

路径组合

·path.join([...paths])

·path.resolve([...paths])

path.join([...paths])

把paths拼起来,然后再normalize一下。

这句话反正我自己看着也是莫名其妙,可以参考下面的伪代码定义。

例子如下:

1.var path = require('path'); 

2. 

3.// 输出 '/foo/bar/baz/asdf' 

4.path.join('/foo', 'bar', 'baz/asdf', 'quux', '..');  

path定义的伪代码如下:

1.module.exports.join = function(){ 

2.  var paths = Array.prototye.slice.call(arguments, 0); 

3.  return this.normalize( paths.join('/') ); 

4.};  

path.resolve([...paths])

这个接口的说明有点啰嗦。

你可以想象现在你在shell下面,从左到右运行一遍cdpath命令,最终获取的绝对路径/文件名,就是这个接口所返回的结果了。

比如path.resolve('/foo/bar','./baz')可以看成下面命令的结果

1.cd /foo/bar 

2.cd ./baz  

更多对比例子如下:

1.var path = require('path'); 

2. 

3.// 假设当前工作路径是 /Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path 

4. 

5.// 输出 /Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path 

6.console.log( path.resolve('') ) 

7. 

8.// 输出 /Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path 

9.console.log( path.resolve('.') ) 

10. 

11.// 输出 /foo/bar/baz 

12.console.log( path.resolve('/foo/bar', './baz') ); 

13. 

14.// 输出 /foo/bar/baz 

15.console.log( path.resolve('/foo/bar', './baz/') ); 

16. 

17.// 输出 /tmp/file 

18.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.js 

21.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的解释更实在,原文链接。

Inotherwords,path.normalizeis"WhatistheshortestpathIcantakethatwilltakemetothesameplaceastheinput"

代码示例如下。

建议读者把代码拷贝出来运行下,看下实际效果。

1.var path = require('path'); 

2.var filepath = '/tmp/demo/js/test.js'; 

3. 

4.var index = 0; 

5. 

6.var compare = 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/upload 

19.  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/js 

27.  console.log( path.normalize('/tmp/demo//js') ); 

28.}); 

29. 

30.compare('路径带..', function(){ 

31.  // 输出 /tmp/demo/js 

32.  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.  // 输出 / 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > IT认证

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1