1 初识 Nodejs
nodejs与es6总结必知必会:https://blog.csdn.net/ZGL_cyy/article/details/107516604
Nodejs 基础
区分 LTS 版本和 Current 版本的不同
① LTS 为长期稳定版,对于追求稳定性的企业级项目来说,推荐安装 LTS 版本的 Node.js。
② Current 为新特性尝鲜版,对热衷于尝试新特性的用户来说,推荐安装 Current 版本的 Node.js。但是,Current 版本中可
能存在隐藏的 Bug 或安全性漏洞,因此不推荐在企业级项目中使用 Current 版本的 Node.js
查看已安装的 Node.js 的版本号
打开终端,在终端输入命令 node –v 后,按下回车键,即可查看已安装的 Node.js 的版本号。
Windows 系统快速打开终端的方式:
使用快捷键(Windows徽标键 + R)打开运行面板,输入 cmd 后直接回车,即可打开终端
在 Node.js 环境中执行 JavaScript 代码
① 打开终端
② 输入 node 要执行的js文件的路径
Node.js® is a JavaScript runtime built on Chrome’s V8 JavaScript engine
Node.js® 是一个基于 Chrome V8 引擎 的 JavaScript 运行时环境
基于 Express 框架 (opens new window),可以快速构建 Web 应用
基于 Electron 框架 (opens new window),可以构建跨平台的桌面应用
基于 restify 框架 (opens new window),可以快速构建 API 接口项目
读写和操作数据库、创建实用的命令行工具辅助前端开发、etc…
2 Buffer 缓冲区
Buffer 的结构与数组类似,操作方法也与数组类似
数组不能存储二进制文件,Buffer 是专门存储二进制数据的
Buffer 存储的是二进制数据,显示时以 16 进制的形式显示
Buffer 每一个元素范围是 00~ff,即 0255、0000000011111111
每一个元素占用一个字节内存
Buffer 是对底层内存的直接操作,因此大小一旦确定就不能修改
Buffer 常用方法:
Buffer.from(str[, encoding]):将一个字符串转换为 Buffer
Buffer.alloc(size):创建指定大小的 Buffer
Buffer.alloUnsafe(size):创建指定大小的 Buffer,可能包含敏感数据(分配内存时不会清除内存残留的数据)
buf.toString():将 Buffer 数据转为字符串
var str = 'Hello前端' var buf = Buffer.from(str) // 占用内存的大小,一个汉字3字节 13 console.log(buf.length) // 字符串的长度 7 console.log(str.length) // 8进制输出第一个元素 145 console.log(buf[1].toString(8)) //创建一个10个字节的buffer var buf2 = Buffer.alloc(10) //通过索引,来操作buf中的元素 buf2[0] = 88 buf2[1] = 255 buf2[2] = 0xaa buf2[3] = 255 var buf3 = Buffer.allocUnsafe(10) console.log(buf3)
3 fs 文件系统模块
- fs 模块中所有的操作都有两种形式可供选择:同步和异步
- 同步文件系统会阻塞程序的执行,也就是除非操作完毕,否则不会向下执行代码
- 异步文件系统不会阻塞程序的执行,而是在操作完成时,通过回调函数将结果返回
- 实际开发很少用同步方式,因此只介绍异步方式
打开模式:
模式 | 说明 |
r | 读取文件,文件不存在抛异常 |
r+ | 读写文件,文件不存在抛异常 |
rs | 同步模式下打开文件用于读取 |
rs+ | 同步模式下打开文件用于读写 |
w | 写文件,不存在则创建,存在则覆盖原有内容 |
wx | 写文件,文件存在打开失败 |
w+ | 读写文件,不存在创建,存在截断 |
wx+ | 读写,存在打开失败 |
a | 追加,不存在创建 |
ax | 追加,存在失败 |
a+ | 追加和读取,不存在创建 |
ax+ | 追加和读取,存在失败 |
3.1 读取文件
简单文件读取
语法格式:
fs.readFile(path[, options], callback)
1
path
:文件路径
options
- :配置选项,若是字符串则指定编码格式
encoding
:编码格式flag
:打开方式
callback
- :回调函数
err
:错误信息data
:读取的数据,如果未指定编码格式则返回一个 Buffer
const fs = require('fs') fs.readFile('./files/1.txt', 'utf-8', function(err, data) => { if(err) { return console.log('failed!' + err.message) } console.log('content:' + data) }) // 复制文件内容 fs.readFile("C:/Users/笔记.mp3", function(err, data) { if(!err) { console.log(data); // 将data写入到文件中 fs.writeFile("C:/Users/hello.jpg", data, function(err){ if(!err){ console.log("文件写入成功"); } } ); } });
流式文件读取
- 简单文件读取的方式会一次性读取文件内容到内存中,若文件较大,会占用过多内存影响系统性能,且读取速度慢
- 大文件适合用流式文件读取,它会分多次将文件读取到内存中
var fs = require('fs') // 创建一个可读流 var rs = fs.createReadStream('C:/Users/笔记.mp3') // 创建一个可写流 var ws = fs.createWriteStream('a.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 fs = require('fs') var rs = fs.createReadStream('C:/Users/lilichao/Desktop/笔记.mp3') var ws = fs.createWriteStream('b.mp3') // pipe()可以将可读流中的内容,直接输出到可写流中 rs.pipe(ws)