当前位置:嗨网首页>书籍在线阅读

10-通过路径访问资源

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

6.4 通过路径访问资源

Node的Path功能模块可以从文件系统的路径中转换和提取数据。同时它提供了一种跨平台的用于处理文件系统路径的方式,从而省去了为Linux和Windows分别编写模块的麻烦。

早些时候,当我们遍历目录下的所有文件并提取文件后缀名时,就提到过它的提取功能。

'use strict';
var fs = require('fs');
var path = require('path');
fs.readdir ('./',function(err, files) {
   for (let file of files) {
      console.log(file);
      if (path.extname(file) == '.gz') {
         fs.unlink('./' + file);
      }
   }
});

如果你想获取文件的基本名称(base name),可以用下面这段代码:

'use strict';
var fs = require('fs');
var path = require('path');
fs.readdir ('./',function(err, files) {
   for (let file of files) {
      let ext = path.extname(file);
      let base = path.basename(file, ext);
      console.log ('file ' + base + ' with extension of ' + ext);
   } 
});

path.basename() 函数的第二个参数表示会返回没有后缀的文件名。

Path模块还能屏蔽环境带来的影响,其中一个例子就是 path.delimeter 属性。这是系统特定的分隔符,在Linux中,它是冒号(:),在Windows中,它是分号(;)。如果你希望在应用程序中分解PATH的环境变量,且程序在这两种操作系统中都能工作,那么可以使用 path.delimeter

var path = require('path');
console.log(process.env.PATH);
console.log(process.env.PATH.split(path.delimiter));

上面的代码在两个环境中都能正常运行,并返回包含PATH变量的数组。

另一个不同之处是操作系统使用斜线(/)还是反斜线(\)。在第5章中,我创建了一个简单的Web服务器,它用一个文件系统的路径提供Web请求的响应资源。在Windows系统中,文件路径是用反斜线分隔的,而Linux系统则是用斜线分隔的。通过使用 path.normalize() ,我的应用程序就可以同时在这两个系统中工作了:

pathname = path.normalize(base + req.url);

Path模块最厉害的并不是那些我们用字符串对象或RegExp无法完成的强大的字符串转换功能,而是在不知道是何种操作系统(独立于操作系统)的情况下转换文件系统路径。

如果你需要解析文件路径,可以用 path.parse() 函数。这个函数返回的结果在不同的操作系统上有很大的差异。在Windows中,当我将 require.main.filename 或者其缩写形式 _ _filename (执行程序的路径和名字)作为参数时,能看到如下输出:

{ root: 'C:\\',
  dir: 'C:\\Users\\Shelley',
  base: 'work',
  ext: '.js',
  name: 'path1' }

在我的Ubuntu服务器上,则得到如下输出:

{ root: '/',
  dir: '/home/examples/public_html/learnnode2',
  base: 'path1.js',
  ext: '.js',
  name: 'path1' }