【前端】尚硅谷Node.js零基础视频教程笔记

文章目录

  • 1.基础
    • [1.1. 基础命令](#1.1. 基础命令)
    • [1.2. 注意事项](#1.2. 注意事项)
  • [2. Buffer(缓冲器)介绍与创建](#2. Buffer(缓冲器)介绍与创建)
    • [2.1 概念](#2.1 概念)
    • [2.2 特点](#2.2 特点)
    • [2.3 使用](#2.3 使用)
  • [3. fs模块(file system)](#3. fs模块(file system))
    • [3.1 文件写入](#3.1 文件写入)
    • [3.2 文件读取](#3.2 文件读取)
    • [3.3 文件移动与重命名](#3.3 文件移动与重命名)
    • [3.4 文件删除](#3.4 文件删除)
    • [3.5 文件夹操作](#3.5 文件夹操作)
    • [3.6 查看资源状态](#3.6 查看资源状态)
    • [3.7 相对路径问题](#3.7 相对路径问题)
    • [3.8 __dirname](#3.8 __dirname)
    • [3.9 练习复制文件脚本](#3.9 练习复制文件脚本)

【前端目录贴】
参考视频: 尚硅谷Node.js零基础视频教程,nodejs新手到高手

1.基础

1.1. 基础命令

  • node -v 查看版本号
  • node hello.js 运行js文件

1.2. 注意事项

Node.js中不能使用BOMDOM的API

js 复制代码
console.log('hello world');
console.log(window);//报错
console.log(document);//报错

说明:浏览器中的javascript语法包括如下内容组成部分

node.js语法的组成部分

2. Buffer(缓冲器)介绍与创建

2.1 概念

  1. Buffer 是一个类似于数组的 对象 ,用于表示固定长度的字节序列
  2. Buffer 本质是一段内存空间,专门用来处理 二进制数据

2.2 特点

  1. Buffer 大小固定且无法调整
  2. Buffer 性能较好,可以直接对计算机内存进行操作
  3. 每个元素的大小为 1 字节(byte)

2.3 使用

  • 创建 Buffer

Node.js 中创建 Buffer 的方式主要如下几种

  1. Buffer.alloc
  2. Buffer.allocUnsafe
  3. Buffer.from
js 复制代码
// 创建了一个长度为 10 字节的 Buffer,相当于申请了 10 字节的内存空间,每个字节的值为 0
let buf_1 = Buffer.alloc(10) //=>结果为<Buffer 00 00 00 00 00 00 00 00 00 00>

//创建了一个长度为 10 字节的 Buffer,buffer 中可能存在旧的数据, 可能会影响执行结果,所以叫unsafe
let buf_2 = Buffer.allocUnsafe(10);

//通过字符串创建 Buffer
let buf_3 = Buffer.from('hello');
//通过数组创建 Buffer
let buf_4 = Buffer.from([105, 108, 111, 118, 101, 121, 111, 117]);
  • Buffer 与字符串的转化

toString 方法将 Buffer 转为字符串 (toString 默认是按照 utf-8 编码方式进行转换的。)

js 复制代码
let buf_4 = Buffer.from([105, 108, 111, 118, 101, 121, 111, 117]);
console.log(buf_4.toString())
  • Buffer 的读写

Buffer 可以直接通过 \[\] 的方式对数据进行处理。
注意:

如果修改的数值超过 255 ,则超过 8 位数据会被舍弃

一个 utf-8 的中文字符 一般 占 3 个字节

js 复制代码
//读取
console.log(buf_3[1]);
//修改
buf_3[1] = 97;
//查看字符串结果
console.log(buf_3.toString());

3. fs模块(file system)

fs 全称为 file system ,称之为 文件系统 ,是 Node.js 中的 内置模块 ,可以对计算机中的磁盘进行操

作。

3.1 文件写入

文件写入就是将 数据 保存到 文件 中,我们可以使用如下几个方法来实现该效果

方法 说明
writeFile 异步写入
writeFileSync 同步写入
appendFile / appendFileSync 追加写入
createWriteStream 流式写入
  • writeFile 异步写入

语法: fs.writeFile(file, data[, options], callback)

参数说明:

  • file 文件名
  • data 待写入的数据
  • options 选项设置 (可选)
  • callback 写入回调

返回值: undefined

js 复制代码
// require 是 Node.js 环境中的'全局'变量,用来导入模块
var fs = require('fs');
// 参数说明:
// file 文件名
// data 待写入的数据
// options 选项设置 (可选)
// callback 写入回调
fs.writeFile('./fileBak/aa.txt','三人行',err => {//不存在,则创建
    //如果写入失败,则调用回调函数,会传入错误对象,如写入成功,会传入null
    if (err) {
        console.log(err);
        return;
    }
    console.log('写入成功');
});
  • writeFileSync同步写入

语法: fs.writeFileSync(file, data[, options])

参数与 fs.writeFile 大体一致,只是没有 callback 参数

返回值: undefined

java 复制代码
// require 是 Node.js 环境中的'全局'变量,用来导入模块
var fs = require('fs');
// 参数说明:
// file 文件名
// data 待写入的数据
// options 选项设置 (可选)
fs.writeFileSync('./fileBak/bb.txt','三人行');
console.log('写入完成')

Node.js 中的磁盘操作是由其他 线程 完成的,结果的处理有两种模式:
同步处理 JavaScript 主线程 会等待 其他线程的执行结果,然后再继续执行主线程的代码,

效率较低
异步处理 JavaScript 主线程 不会等待 其他线程的执行结果,直接执行后续的主线程代码,

效率较好

  • appendFile / appendFileSync追加写入

appendFile 作用是在文件尾部追加内容,appendFile 语法与writeFile语法完全相同

语法:
fs.appendFile(file, data[, options], callback)
fs.appendFileSync(file, data[, options])

返回值: 二者都为 undefined

java 复制代码
// require 是 Node.js 环境中的'全局'变量,用来导入模块
// require 是 Node.js 环境中的'全局'变量,用来导入模块
var fs = require('fs');
// 参数说明:
// file 文件名
// data 待写入的数据
// options 选项设置 (可选)
// callback 写入回调
for (let i = 0; i < 10; i++) {
    // fs.appendFile('./fileBak/aa.txt','三人行',err => {//不存在,则创建,异步追加
    fs.appendFileSync('./fileBak/aa.txt','三人行');
}
console.log(1)
  • createWriteStream流式写入

语法: fs.createWriteStream(path[, options])

参数说明:

  • path 文件路径
  • options 选项配置( 可选
  • 返回值: Object
java 复制代码
// require 是 Node.js 环境中的'全局'变量,用来导入模块
var fs = require('fs');
// 参数说明:
// file 文件名
// options 选项设置 (可选)
var ws = fs.createWriteStream('./fileBak/cc.txt');
ws.write('11');
ws.write('22');
ws.end();
console.log(1)

程序打开一个文件是需要消耗资源的 ,流式写入可以减少打开关闭文件的次数。

流式写入方式适用于 大文件写入或者频繁写入 的场景, writeFile 适合于 写入频率较低的场景

3.2 文件读取

文件读取顾名思义,就是通过程序从文件中取出其中的数据,我们可以使用如下几种方式

方法 说明
readFile 异步读取
readFileSync 同步读取
createReadStream 流式读取
  • readFile 异步读取

语法: fs.readFile(path[, options], callback)

参数说明:

  • path 文件路径
  • options 选项配置
  • callback 回调函数
  • 返回值:undefined
js 复制代码
var fs = require('fs');
fs.readFile('./fileBak/aa.txt',(err,data) => {
    if (err) {
        throw err
    }
    console.log(data);
})

fs.readFile('./fileBak/aa.txt','utf-8',(err,data) => {
    if (err) {
        throw err
    }
    console.log(data);
})
  • readFileSync 同步读取

语法: fs.readFileSync(path[, options])

参数说明:

path 文件路径

options 选项配置

返回值: string | Buffer

js 复制代码
var fs = require('fs');
var data1 = fs.readFileSync('./fileBak/aa.txt');
console.log(data1)
var data2 = fs.readFileSync('./fileBak/aa.txt','utf-8');
console.log(data2)
  • createReadStream 流式读取

语法: fs.createReadStream(path[, options])

参数说明:

  • path 文件路径
  • options 选项配置( 可选
  • 返回值: Object
js 复制代码
var fs = require('fs');
var readStream = fs.createReadStream('./fileBak/aa.txt','utf-8');
readStream.on('data',data3=>{
    console.log(data3)
    console.log(data3.length)
});
//读取完毕后,执行end回调
readStream.on('end',()=>{
    console.log('读取完后');
})

3.3 文件移动与重命名

在 Node.js 中,我们可以使用 rename 或 renameSync` 来移动或重命名 文件或文件夹

语法:

  • fs.rename(oldPath, newPath, callback)

  • fs.renameSync(oldPath, newPath)
    参数说明:

  • oldPath 文件当前的路径

  • newPath 文件新的路径

  • callback 操作后的回调(同步)

js 复制代码
var fs = require('fs');
fs.rename('./fileBak/aa.txt','./fileBak/aa2.txt',err => {
    if(err) throw err;
    console.log('移动完成');
});
js 复制代码
var fs = require('fs');
fs.renameSync('./fileBak/aa2.txt','./fileBak/aa.txt');

3.4 文件删除

在 Node.js 中,我们可以使用 unlink 或 unlinkSync 来删除文件

语法:

  • fs.unlink(path, callback)

  • fs.unlinkSync(path)
    参数说明:

  • path 文件路径

  • callback 操作后的回调

js 复制代码
var fs = require('fs');
fs.unlink('./fileBak/aa.txt',err => {
    if(err) throw err;
    console.log('删除完成');
});
js 复制代码
var fs = require('fs');
fs.unlinkSync('./fileBak/aa.txt');

3.5 文件夹操作

借助 Node.js 的能力,我们可以对文件夹进行 创建读取删除 等操作

方法 说明
mkdir / mkdirSync 创建文件夹
readdir / readdirSync 读取文件夹
rmdir / rmdirSync 删除文件夹
  • mkdir / mkdirSync 创建文件夹

在 Node.js 中,我们可以使用 mkdirmkdirSync 来创建文件夹

语法:

  • fs.mkdir(path[, options], callback)

  • fs.mkdirSync(path[, options])
    参数说明:

  • path 文件夹路径

  • options 选项配置( 可选 )

  • callback 操作后的回调

js 复制代码
var fs = require('fs');
fs.mkdir('./fileBak/cc',err => {//如果存在会报错
    if(err) throw err;
    console.log('创建成功');
})
js 复制代码
var fs = require('fs');
fs.mkdirSync('./fileBak/bbD');
js 复制代码
var fs = require('fs');
//异步递归创建文件夹
fs.mkdir('./fileBak/1/2/3',{recursive:true},err => {
    if (err) {
        throw err;
    }
    console.log('同步递归创建文件夹');
});
js 复制代码
var fs = require('fs');
//同步递归创建文件夹
fs.mkdirSync('./fileBak/1/2/3',{recursive:true});
  • readdir / mkdirSync 读取文件夹

在 Node.js 中,我们可以使用 readdir 或 readdirSync 来读取文件夹

语法:

  • fs.readdir(path[, options], callback)

  • fs.readdirSync(path[, options])
    参数说明:

  • path 文件夹路径

  • options 选项配置( 可选 )

  • callback 操作后的回调

js 复制代码
var fs = require('fs');
fs.readdir('./fileBak/1',(err,data) => {
    if (err) {
        throw err;
    }
    console.log(data);
});
js 复制代码
var fs = require('fs');
var data = fs.readdirSync('./fileBak/1');
console.log(data)
  • rmdir / mkdirSync 删除文件夹

在 Node.js 中,我们可以使用 rmdir 或 rmdirSync 来删除文件夹

语法:

  • fs.rmdir(path[, options], callback)

  • fs.rmdirSync(path[, options])
    参数说明:

  • path 文件夹路径

  • options 选项配置( 可选 )

  • callback 操作后的回调

js 复制代码
var fs = require('fs');
//异步删除文件夹
// fs.rmdir('./fileBak/cc', err => {
//     if(err) throw err;
//     console.log('删除成功');
// });

//异步递归删除文件夹
fs.rmdir('./fileBak/1', {recursive: true}, err => {
    if(err) {
        console.log(err);
    }
    console.log('递归删除')
});

3.6 查看资源状态

在 Node.js 中,我们可以使用 stat 或 statSync 来查看资源的详细信息

语法:

  • fs.stat(path[, options], callback)

  • fs.statSync(path[, options])
    参数说明:

  • path 文件夹路径

  • options 选项配置( 可选 )

  • callback 操作后的回调

js 复制代码
var fs = require('fs');
//异步获取状态
// fs.stat('./fileBak/aa.txt', (err, data) => {
//     if(err) throw err;
//     console.log(data);
// });


//同步获取状态
let data = fs.statSync('./fileBak/aa.txt');
console.log(data)

3.7 相对路径问题

fs 模块对资源进行操作时,路径的写法有两种:

  • 相对路径
    * ./座右铭.txt 当前目录下的座右铭.txt
    * 座右铭.txt 等效于上面的写法
    * ../座右铭.txt 当前目录的上一级目录中的座右铭.txt
  • 绝对路径
    * D:/Program Files windows 系统下的绝对路径
    * /usr/bin Linux 系统下的绝对路径
    相对路径中所谓的 当前目录 ,指的是 命令行的工作目录 ,而并非是文件的所在目录

所以当命令行的工作目录与文件所在目录不一致时,会出现一些 BUG

3.8 __dirname

__dirnamerequire 类似,都是 Node.js 环境中的'全局'变量,__dirname 保存着 当前文件所在目录的绝对路径 ,可以使用 __dirname 与文件名拼接成绝对路径
let data = fs.readFileSync(__dirname + '/data.txt');

3.9 练习复制文件脚本

js 复制代码
var fs = require('fs');
fs.readFile('./fileBak/1.png', (err, data) => {
    if (err) {
        throw  err;
        return;
    }
    console.log('开始读取....')

    fs.writeFile('./fileBak/2.png', data, err => {
        if (err) {
            throw  err;
            return;
        }
        console.log('开始导出...');
        console.log('结束导出...');
    })


    console.log('结束读取....')
});
// fs.writeFile('./fileBak/2.png', 'f', err => {
//     if (err) {
//         throw  err;
//         return;
//     }
//     console.log('开始导出...');
//     console.log('结束导出...');
// })
相关推荐
To_OC2 小时前
别再串行写 await 了,Promise.all 才是并行请求的正确打开方式
前端·javascript·promise
vipbic3 小时前
中后台越做越乱后,我用插件化把它救回来了
前端·vue.js
Hyyy3 小时前
Computer Use 适合做什么,不适合做什么——一次真实使用后的思考
前端
小和尚同志3 小时前
前端 AI 单元测试思考与落地
前端·人工智能·aigc
invicinble4 小时前
c端系统,其实更像一个信息展示平台
前端
李姆斯5 小时前
管理是否可以被完全量化
前端·产品经理·团队管理
疯狂打码的少年5 小时前
【软件工程】软件开发模型:增量模型与迭代模型
笔记·软件工程
Generalzy5 小时前
从本地 Demo 到生产级检索:Milvus 学习笔记(3)
笔记·学习·milvus
名字还没想好☜6 小时前
Next.js 中间件实战:鉴权、重定向与 A/B 分流
开发语言·前端·javascript·中间件·react·next.js
广州灵眸科技有限公司6 小时前
瑞芯微RV1126B开发板(EASY-EAI-PI2) INI文件操作
java·前端·javascript·网络·人工智能