NodeJS 基础 API

本文详细介绍了NodeJS的基础API,包括path模块中的normalize、join、resolve等方法,以及Buffer的创建与操作,如alloc、from等。此外,还探讨了fs模块的文件和目录操作,如readFile、writeFile、mkdir等,以及异步编程的解决方案,如promisify和async/await。
摘要由CSDN通过智能技术生成

在介绍 NodeJS 的基础 API 前,先抛出 API 中文文档地址:http://nodejs.cn/api/

path

path 顾名思义就是与路径相关的一切,在 path 模块中提供了一些工具函数,用于处理文件与目录的路径。我们可以通过以下方式使用:

const path = require('path');
normalize – 该方法将我们传入的可能不太规范的路径转化成规范的路径

这么说可能还是太模糊,我们看几个例子就明白了

// 使用 ES6 的语法,相当于 const normalize = require('path').normalize</span>
const {
    normalize} = require('path');
console.log(normalize('/user//local/bin'));
console.log(normalize('/user/local/../bin'));

输出的结果为:
在这里插入图片描述
显而易见,第一个将我们输入的不规范的 “//” 转化成了 “/”,第二个我们输入的 “…/” 代表的是上一级目录,在输出时给我们修改成了 “/user/bin”,删除了 “/local”

这就是 normalize 的作用,将我门输入的不规范的路径规范化

join – 顾名思义就是拼接的意思,它会将传入的路径进行拼接,其内部会调用 normalize 方法去处理不规范的路径
const {
    join} = require('path');
console.log(join('/user/','/local/','/bin'));
console.log(join('/user','../local/..','/bin'));

输出结果为:
在这里插入图片描述

resolve – 将相对路径转化为绝对路径
const {
    resolve } = require('path');
console.log(resolve ('./'));

其输出结果为:
在这里插入图片描述

输出的就是你当前项目所在的绝对目录

几个与名字相关 API
/*
*    basename   -- 文件名 
*    dirname -- 文件所在的目录
*    extname -- 文件的扩展名
*/
const {
    basename ,dirname ,extname} = require('path');
const path = "/user/local/bin/no.txt";
console.log(basename(path));
console.log(dirname(path));
console.log(extname(path));

输出的结果为:
在这里插入图片描述

parse – 返回一个包含 path 所有元素的对象
const {parse} = require('path');
const path = "/user/local/bin/no.txt";
console.log(parse(path));

其输出的结果为:
在这里插入图片描述

format – 从一个对象返回一个字符串,与 path.parse() 相反

先来看一个例子

const {
    parse} = require('path');
const path = "/user/local/bin/no.txt";
const parsePath = parse(path);
// 将 parse 处理后的对象保存起来,通过 format 进行处理
console.log(format(parsePath));

其输出结果为:
在这里插入图片描述

除此之外,format 还有几个值得注意的特性:

当 format(pathObject) 中传入的属性有组合时,有些属性的优先级比其它的高:

  • 如果提供了 pathObject.dir ,则 pathObject.root 将会被忽略
  • 如果提供了 pathObject.base,则 pathObject.ext 和 pathObject.name 会被忽略
    注:一般情况下,很少使用这个方法,但是当我们需要更改目录或文件时,用这种方法就相对简单
sep – 输出特定平台的路径片段的分隔符
const {
    sep } = require('path');
console.log(sep);

其输出结果为:
在这里插入图片描述

这个是在 windows 系统下的路径片段的分隔符

delimiter – 输出特定平台路径分隔符
const {
    delimiter } = require('path');
console.log(delimiter );

其输出结果为:
在这里插入图片描述
这个是在 windows 系统下的路径分隔符

win32 与 posix – 这两个属性使得 path 可以跨平台查看

win32 :可以强制当前系统使用 windows 的系统,使得 NodeJS 的 path 模块也遵循 windows 的风格

posix :可以强制当前系统使用 posix 的系统,使得 NodeJS 的 path 模块也遵循 posix 的风格

此时,我们就可以通过这两个命令来再次执行 exp 与 delimiter,来查看在 posix 下的路径段分隔符以及路径分隔符

我们上面看过 windows 环境下的 exp 与 delimiter,所以现在我们来看一下 posix 下的

const {
    posix,sep,delimiter} = require('path');
console.log(posix.sep);
console.log(posix.delimiter);

其输出结果为:
在这里插入图片描述

小结:

现在我们知道和 path 相关的包括 “__dirname”,"__filename",“process.cwd()”,那么它们之间又有什么区别呢?

“__dirname”,"__filename" 总是返回文件的绝对路径,而 “process.cwd()” 则是返回执行 node 命令所在的文件夹的路径。

除了它们之外,"./" 以及 “…/” 在不同的情况下也会有不同的意思,在 require 方法中总是相对当前文件所在的文件夹,但是在其它地方则是和 “process.cwd()” 一样,相对于执行 node 命令所在的文件夹

Buffer

在介绍 Buffer API 之前,我们先来看几个 Buffer 的特点

  • Buffer 用于处理二进制数据流
  • 实例类似整数数组,大小固定
  • 运用 C++ 代码在 V8 堆外分配物理内存
  • 用于 Buffer 使用频率非常高,所以 NodeJS 将 Buffer 挂到了 global 上,我们可以直接使用
实例化 Buffer 的方法
Buffer.alloc(size[,fill[,encoding]])
  • size – 新建的 Buffer 期望的长度(创建后长度无法改变
  • fill – 用来填充新建的 Buffer 的值,默认:0
  • encoding – 该值是它的字符编码,默认值:‘utf8’
// 创建一个长度为 10,且用 0 填充的 Buffer
const buf1 = Buffer.alloc(10);
console.log(buf1);
// 创建一个长度为 10,且用 0×1 填充的 Buffer (0× 表示 16 进制)
const buf2 = Buffer.alloc(10,1);
console.log(buf2);
// 创建一个长度为 10,用 'aGVsbG8gd29ybGQ=' 填充,以 base64 来编码的 Buffer
const buf3 = Buffer.alloc(10,'aGVsbG8gd29ybGQ=','base64');

其输出结果为:
在这里插入图片描述

Buffer.allocUnsafe(size)
  • size – 新建的 Buffer 期望的长度
  • 以此方法创建的 Buffer 实例的底层是未初始化的,所以新建的 Buffer 的内容是未知的,因此有可能暴露敏感数据,所以使用 allocUnsafe() 时需要使用 fill() 或 write() 重写(尽量不要使用 allocUnsafe())
// 创建一个长度为 10,未初始化的 Buffer
const buf4 = Buffer.allocUnsafe(10);
console.log(buf4);

其输出结果为:
在这里插入图片描述

可以看出新建的 Buffer 是未初始化的,里面的内容可能暴露敏感数据

Buffer.from()
  • 根据给定的参数进行实例化
// 创建一个包含 [0×1,0×2,0×3] 的 Buffer
const buf5 = Buffer.from([1,2,3]);
console.log(buf5);
// 创建一个包含 UTF-8 字节的 Buffer 
const buf6 = Buffer.from('test');
console.log(buf6);
// 创建一个包含 base64 字节的 Buffer 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值