node.js - path模块

0x01 path模块方法:

  • 返回路径中的最后一部分:
path.basename(p, [ext]);
//p:路径
//ext:输入一个文件后缀名,如果匹配到该路径中有该后缀名,则省略该后缀名,只显示文件名。

path.basename("c:a/b/index.js", [ext]); //index.js
path.basename("c:a/b/index.js", ".js"); //index
  • 返回路径中代表文件夹的部分:
path.dirname(p);

path.dirname("c:a/b/index.js"); //c:a/b
  • 返回路径中文件的后缀名:
path.extname(p);

path.dirname("c:a/b/index.js"); //.js
path.dirname("c:a/b/index."); //.
path.dirname("c:a/b/index"); //返回空字符串
  • 判断参数是否一个绝对路径:
path.isAbsolute(path);

path.isAbsoulute("c:/a/b/index.js"); //true - 绝对路径
path.isAbsoulute("./c/index.js"); //false - 相对路径
  • 将路劲解析为一个对象:
path.parse(pathString);

path.parse("c:/a/b/index.js");
//解析出来的对象
{ 
  root: 'c:/',
  dir: 'c:/a/b',
  base: 'index.js',
  ext: '.js',
 name: 'index'
}
  • 路径拼接:
path.join();

0x02 dirname和filename

下面这两个属性是 Node 中的全局变量:

  • __dirname

    • 获取当前该文件,所在目录的,绝对路径,(不包含自己)
  • __filename

    • 获取当前该文件,所在的,绝对路径,(包含自己)

在文件操作中,使用相对路径是不可靠的,因为在 Node 中,操作的路径被设计为,相对于执行 node 命令所处的路径。

例如:

  • 这个文件夹中有一个app.js,还有一个public文件夹,里面有一个a.txt。

    • 需要在app.js中将a.txt中的数据读出来。
  • 如果使用相对路径,那么当我退出32593这个文件夹,跳转到上一级目录:Users文件夹,执行node 32593/app.js 那么这个时候就会在Users这个文件中中找a.txt。


为了解决这个问题,只需要将把相对路径更改为绝对路径就可以了。这个时候就可以使用__dirname来动态获取该文件现在所在的目录。

补充:模块中的标识路径(require)和这里的路径没关系,不受影响。

const fs = require("fs");
const path = require("path");

fs.readFile(path.join(__dirname, "./public/a.txt"), "utf8", function(err, data){
    if(err){
        return console.log("读取失败!", err);
    }
    console.log(data);
});

发表评论 / Comment

用心评论~