Node

106 阅读3分钟

一、 Node.js

1.1 Node.js是什么

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。

简单来讲,就是一个使用js写服务器的代码环境。

1.2 Node.js有什么特点

1.2.1 优点

异步的非阻塞的I/O(I/O线程池)

事件循环机制

单线程

跨平台

image.png

1.2.2 缺点

回调函数嵌套太多、太深(俗称回调地狱)

单线程,处理不好CPU 密集型任务

1.3 Node.js的应用场景

主要应用场景:中间层BFF(backends for frontends)、RESTful API

I/O 密集型的领域:如 服务端渲染,前端项目构建。

低延迟的网络应用:如 即时聊天。

1.4 Node.js的安装

一键傻瓜式安装

安装完成之后,打开命令行窗口,输入node -v查看当前node版本

image.png

二、模块化

模块化

三、包和包管理器 npm

npm

四、 Buffer 缓冲器

4.1 Buffer是什么

Buffer是一个和数组类似的对象,不同是Buffer是专门用来保存二进制数据的。

4.2 Buffer特点

大小固定:在创建时就确定了,且无法调整

性能较好:直接对计算机的内存进行操作

4.3 Buffer的使用

4.3.1创建 Buffer

//创建一个指定size大小的Buffer

var buf = Buffer.alloc(size);   //安全,里面全是0

var buf = Buffer.allocUnsafe(size);    //不安全,可能包含旧数据,需要重写所有数据

//获取Buffer的长度

buf.length

4.3.2 转换

// 相当于Buffer.alloc(size);

var buf = Buffer.allocUnsafe(size);

buf.fill(0)   //将可能出现的敏感数据用0全部填充

// 将一个字符串转换为Buffer
var buf = Buffer.from(str);

// 将一个Buffer转换为字符串
var str = buf.toString();

五、 fs 文件系统

5.1 fs是什么

全称为file system,所谓的文件系统,就是对计算机中的文件进行增删改查等操作。它是一个服务器的基础,在Node中通过fs模块来操作文件系统。        

5.2 fs的使用

fs模块是Node的核心模块,不需要下载,直接引入即可使用。

Nodejs中文网|fs

菜鸟教程-Nodejs|fs

// 引入 fs 模块var fs = require( "fs" );

fs中的大部分方法都为我们提供了两个版本:

同步方法异步方法
带sync的方法不带sync的方法
同步方法会阻塞程序的执行异步方法不会阻塞程序的执行
同步方法通过返回值返回结果异步方法都是通过回调函数来返回结果的

5.3文件的写入

5.3.1 同步写入

  • 打开文件 image.png

  • 写入内容并保存 image.png

  • 关闭文件 image.png

5.3.2异步写入

  • 打开文件 image.png

  • 写入内容并保存 image.png

  • 关闭文件

image.png

6.3.3简单写入

image.png

6.3.4流式写入

流式文件写入适用于一些比较大的文件,可以分多次向文件中写入内容,有效避免内存溢出的问题

image.png

5.4文件的读取

5.4.1 简单读取文件

fs.readFileSync(path[, options])

fs.readFile(path[, options], callback)

参数:

 path 读取文件的路径

 options 配置对象

 encoding 指定打开文件的编码,默认是null

 flag 文件的操作类型,默认是 r

 callback 回调函数,通过回调函数返回读取到的数据

 err 错误对象

 data 返回的数据(Buffer

5.4.2 流式读取文件

适合较大的文件

// 方式一:

//创建一个可读流

var rs = fs.createReadStream("C:\\other\\MP3\\music.mp3");

//创建一个可写流

var ws = fs.createWriteStream("biji.mp3");

//监听可读流,可读流读取完毕后会自动关闭

rs.once("open" , function () {

  console.log("流打开了");

});

rs.once("close" , function () {

  console.log("流关闭了");

//数据读取完毕,可以关闭可写流

  ws.end();

});

//监听可写流

ws.once("open" , function () {

  console.log("可写流打开了");

});

ws.once("close" , function () {

  console.log("可写流关闭了");

});

//要通过可读流读取一个文件,必须为流绑定一个data事件,当绑定了data事件以后,流会自动读取

rs.on("data",function (data) {

//console.log(data);

//将数据写入到可写流中

  ws.write(data);

});

//方式二:

//创建一个可读流

var rs = fs.createReadStream("C:\\other\\MP3\\music.mp3");

//创建一个可写流

var ws = fs.createWriteStream("biji.mp3");

/*

 pipe()

  - 可以将一个可读流中的内容写入到一个可写流中

 */

rs.pipe(ws);