热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

nodejs入门API之path模块

Path模块在各个系统上的差异Path模块API解析 一、Path模块在各个系统上的差异path模块提供用于处理文件路径和目录路径的使用工具。letpathrequire(path
  • Path模块在各个系统上的差异
  • Path模块API解析

 一、Path模块在各个系统上的差异

path模块提供用于处理文件路径和目录路径的使用工具。

let path = require('path')

由于node.js应用程序运行所在的系统不一样会导致path获取的路径风格不一致。比如windows与Unix上的POSIX系统操作接口就会有如下差别:

//比如path.basename()获取路径最后一部分的差异
path.basename('C:\\temp\\myfile.html');
// POSIX -- 返回: 'C:\\temp\\myfile.html' 
// Windows -- 返回: 'myfile.html'

//比如path.delimaiter路径界定符的差异
console.log(process.env.PATH);
// POSIX -- 打印: '/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin'
// Windows -- 打印: 'C:\Windows\system32;C:\Windows;C:\Program Files\node\'

除了获取的数据值的差异,还有比如在示例中可以看到的路径定界符的差异,windows上可以有(“\\”,“//”,“/”),在POSIX系统上都采用(“/”)。

还有就是在posix系统上使用path使用path.posix属性来指定调用posix系统模式下的方法,详细见第三节3.2和3.4的内容。

二、Path模块API解析(方法)

2.1 path.basename(path[,ext]):

用来获取路径指向的节点名称。

path:路径字符

ext:可选扩展名;指定路径名获得路径最后一部分的获取结果会省略后缀

path.basename('/foo/bar/baz/asdf/quux.html');
// 返回: 'quux.html'
path.basename('/foo/bar/baz/asdf/quux.html', '.html');
// 返回: 'quux'

2.2 path.dirname(path)

用来获取当前路径所在目录,也就不包含最后一个路径节点和路径分隔符。

1 //示例一
2 path.dirname('/foo/bar/baz/asdf/quux');
3 // 返回: '/foo/bar/baz/asdf'
4 
5 //示例二
6 path.dirname("/foo/path/index.js");
7 // 返回: '/foo/path'

3.3 path.extname(path)

用来获取路径扩展名。

 1 path.extname('index.html');
 2 // 返回: '.html'
 3 path.extname('index.coffee.md');
 4 // 返回: '.md'
 5 path.extname('index.');
 6 // 返回: '.'
 7 path.extname('index');
 8 // 返回: ''
 9 path.extname('.index');
10 // 返回: ''
11 path.extname('.index.md');
12 // 返回: '.md'

2.4 path.format(pathObject)

将路径对象转换成路径字符串。对象属性包含:dir、root、base、name、ext。注意如果是使用根路径root需要在末尾添加路径分隔符,如果使用文件类型需要在文件类型名称前添加点“.”。

  • 如果提供了 pathObject.dir,则忽略 pathObject.root。(使用root时需要在尾部添加路径分隔符)
  • 如果 pathObject.base 存在,则忽略 pathObject.ext 和 pathObject.name

还需要注意在windows上拼接字符串时,手动写入分隔符时需要写入双反斜杠(\\),这在第一节的示例中已经可以看到相关内容。

1 //windows上的示例
2 let path = require("path");
3 console.log( path.format({root:"root\\",name:"name",ext:".ext"}));//root\name.ext
4 console.log( path.format({dir:"dir",name:"name",ext:".ext"}));//dir\name.ext
5 console.log( path.format({root:"root\\",base:"base.txt"}));//root\base.txt
6 console.log( path.format({dir:"dir",base:"base.txt"}));//dir\base.txt

2.5 path.isAbsolute(path):

检测路径是否是绝对路径。

 1 //windows上的示例
 2 let path = require("path");
 3 path.isAbsolute('//server');    // true
 4 path.isAbsolute('\\\\server');  // true
 5 path.isAbsolute('C:/foo/..');   // true
 6 path.isAbsolute('C:\\foo\\..'); // true
 7 path.isAbsolute('bar\\baz');    // false
 8 path.isAbsolute('bar/baz');     // false
 9 path.isAbsolute('.');           // false
10 
11 //POSIX
12 path.isAbsolute('/foo/bar'); // true
13 path.isAbsolute('/baz/..');  // true
14 path.isAbsolute('qux/');     // false
15 path.isAbsolute('.');        // false

2.6 path.join([...path]):

将路径片段使用平台特定的分隔符作为定界符连接起来,生成符合平台规范的路径字符串。

path.join('/foo', 'bar', 'baz/asdf', 'quux', '..');
// 返回: '/foo/bar/baz/asdf'

path.join('foo', {}, 'bar');
// 抛出 'TypeError: Path must be a string. Received {}'

2.7 path.nornalize(path):

将传入的不规范的路径字符串处理成规范的路径字符串。比如在路径字符串中出现连续的多个定界符,可以通过nornalize()处理转换成标准的符合规范的路径字符串,比如示例:

 1 //例如,在 POSIX 上:
 2 path.normalize('/foo/bar//baz/asdf/quux/..');
 3 // 返回: '/foo/bar/baz/asdf'
 4 
 5 //在 Windows 上:
 6 path.normalize('C:\\temp\\\\foo\\bar\\..\\');
 7 // 返回: 'C:\\temp\\foo\\'
 8 
 9 path.win32.normalize('C:////temp\\\\/\\/\\/foo/bar');
10 // 返回: 'C:\\temp\\foo\\bar'

2.8 path.parse(path):

 将路径字符串转换成路径对象。(末尾的路径定界符会被忽略)

 1 //在 POSIX 上:
 2 path.parse('/home/user/dir/file.txt');
 3 // 返回:
 4 // { root: '/',
 5 //   dir: '/home/user/dir',
 6 //   base: 'file.txt',
 7 //   ext: '.txt',
 8 //   name: 'file' }
 9 
10 //在 Windows 上:
11 path.parse('C:\\path\\dir\\file.txt');
12 // 返回:
13 // { root: 'C:\\',
14 //   dir: 'C:\\path\\dir',
15 //   base: 'file.txt',
16 //   ext: '.txt',
17 //   name: 'file' }

2.9 path.relative(from,to):

获取from路径到to路径的相对路径的路径字符串。

1 //在 POSIX 上:
2 path.relative('/data/orandea/test/aaa', '/data/orandea/impl/bbb');
3 // 返回: '../../impl/bbb'
4 
5 //在 Windows 上:
6 path.relative('C:\\orandea\\test\\aaa', 'C:\\orandea\\impl\\bbb');
7 // 返回: '..\\..\\impl\\bbb'

2.10 path.resolve([...path]):

 将路径片段转换成绝对路径字符串。如果没有传参则返回当前工作路径的绝对路径。

1 path.resolve('/foo/bar', './baz');
2 // 返回: '/foo/bar/baz'
3 
4 path.resolve('/foo/bar', '/tmp/file/');
5 // 返回: '/tmp/file'
6 
7 path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif');
8 // 如果当前工作目录是 /home/myself/node,
9 // 则返回 '/home/myself/node/wwwroot/static_files/gif/image.gif'

3.11 path.toNamespacedPath(path):

 path

仅在 Windows 系统上,返回给定 path 的等效名称空间前缀路径。 如果 path 不是字符串,则将返回 path 而不进行修改。

二、Path模块API解析(属性)

3.1 path.delimiter

用来获取当前系统的路径定界符。

console.log(path.delimiter);
// Windows -- 打印:;
// POSIX -- 打印::

可以使用定界符来拆分多个路径组合的字符串:

1 console.log(process.env.PATH);
2 // POSIX -- 打印: '/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin'
3 // Windows -- // 打印: 'C:\Windows\system32;C:\Windows;C:\Program Files\node\'
4 
5 //使用path.delimiter拆分路径组合字符串
6 process.env.PATH.split(path.delimiter);
7 // POSIX -- 返回: ['/usr/bin', '/bin', '/usr/sbin', '/sbin', '/usr/local/bin']
8 // Windows 返回: ['C:\\Windows\\system32', 'C:\\Windows', 'C:\\Program Files\\node\\']

3.2 path.posix:

用来作为POSIX平台上的path模块方法的特定访问。例如path.basename()方法在POSIX上的可以这样调用:

path.posix.basename('/tmp/myfile.html');
// 返回: 'myfile.html'

3.3 path.sep:

该属性用于获取平台特定的路径片段分隔符。

windows上是 \ 。

POSIX上是 / 。

3.4 path.win32:

用来作为Windows平台上的path模块方法的特定访问。例如path.basename()方法在Windows上可以这样调用:

path.win32.basename('\\tmp\\myfile.html');
// 返回: 'myfile.html'

推荐阅读
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • node.jsurlsearchparamsAPI哎哎哎 ... [详细]
  • java实现rstp格式转换使用ffmpeg实现linux命令第一步安装node.js和ffmpeg第二步搭建node.js启动websocket接收服务
    java实现rstp格式转换使用ffmpeg实现linux命令第一步安装node.js和ffmpeg第二步搭建node.js启动websocket接收服务第三步java实现 ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 在编写业务代码时,常常会遇到复杂的业务逻辑导致代码冗长混乱的情况。为了解决这个问题,可以利用中间件模式来简化代码逻辑。中间件模式可以帮助我们更好地设计架构和代码,提高代码质量。本文介绍了中间件模式的基本概念和用法。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • 本文介绍了Sencha Touch的学习使用心得,主要包括搭建项目框架的过程。作者强调了使用MVC模式的重要性,并提供了一个干净的引用示例。文章还介绍了Index.html页面的作用,以及如何通过链接样式表来改变全局风格。 ... [详细]
  • RN即ReactNative基于React框架针对移动端的跨平台框架,在学习RN前建议最好熟悉下html,css,js,当然如果比较急,那就直接上手吧,毕竟用学习前面基础的时间,R ... [详细]
author-avatar
62755
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有