尚硅谷最新Node.js 学习笔记(一)

news2024/11/29 10:57:07

目录

一、Nodejs入门

1.1、为什么要学习Nodejs?

1.2、Nodejs是什么?

1.3、Nodejs的作用

1.4、Nodejs安装

1.5、Nodejs初体验

1.6、编码注意事项

二、Buffer(缓冲器)

2.1、概念

2.2、特点

2.3、使用

创建Buffer

Buffer与字符串的转化

Buffer的读写

三、fs模块

3.1、文件写入

异步写入

同步写入

appendFile / appendFileSync 追加写入

createWriteStream 流式写入

写入文件的场景

3.2、文件读取

readFile 异步读取

readFile 同步读取

createReadStream 流式读取

读取文件应用场景

3.3、文件移动与重命名

3.4、文件删除

3.5、文件夹操作

mkdir 创建文件夹

readdir 读取文件夹

rmdir 删除文件夹

3.6、查看资源状态

3.7、相对路径问题

3.8、__dirname

四、Path模块


一、Nodejs入门

1.1、为什么要学习Nodejs?

(1)可以让其它人访问我们编写的网页。

(2)为后续的框架(Vue、React、Angular)学习打基础。

1.2、Nodejs是什么?

通俗来讲:Nodejs就是一款应用程序,是一款软件,它可以运行JavaScript。

1.3、Nodejs的作用

  1. 开发服务器应用
  2. 开发工具类应用(webpack、vite、babel)
  3. 开发桌面端应用(vscode、postman...)

1.4、Nodejs安装

这面介绍个工具nvm,它是一个nodejs版本管理工具,有了它一行命令就可以安装各种版本的nodejs,也可以随意切换版本。

参考我另一篇文章:nvm 安装nodejs教程【详细】-CSDN博客

1.5、Nodejs初体验

假如我在D盘下创建了一个hello.js文件,代码如下:

console.log("Hello NodeJS");

然后我们用cmd终端去运行这段代码:

1.6、编码注意事项

  1. Node.js中是不能使用BOM和DOM的API的,不过console和定时器是可以使用的。
  2. Node.js中顶级对象为global,也可以用globalThis访问顶级对象。

二、Buffer(缓冲器)

2.1、概念

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

2.2、特点

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

2.3、使用

创建Buffer

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

// 1、alloc
// 创建了一个长度为 10 字节的 Buffer,相当于申请了 10 字节的内存空间,每个字节的值为 0
let buf = Buffer.alloc(10);
console.log(buf); // <Buffer 00 00 00 00 00 00 00 00 00 00>

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

// 3、通过字符串创建 Buffer
let buf_3 = Buffer.from('hello');
//通过数组创建 Buffer
let buf_4 = Buffer.from([105, 108, 111, 118, 101, 121, 111, 117]);
console.log(buf_3); // <Buffer 68 65 6c 6c 6f>
console.log(buf_4); // <Buffer 69 6c 6f 76 65 79 6f 75>

Buffer与字符串的转化

let buf_4 = Buffer.from([105, 108, 111, 118, 101, 121, 111, 117]);
console.log(buf_4.toString()); // iloveyou

Buffer的读写

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

let buf = Buffer.from('hello');
console.log(buf[0]); // 104
console.log(buf[0].toString(2)); // 1101000

三、fs模块

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

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

3.1、文件写入

异步写入

// 1、导入fs模块
const fs = require('fs');

// 2、写入文件
fs.writeFile('./座右铭.txt', '三人行,必有我师焉', err => {
    if (err) {
        console.log("写入失败");
        return;
    }
    console.log("写入成功");
});

同步写入

fs.writeFileSync('./data.txt', 'test');

writeFileSync没有 callback 参数。

appendFile / appendFileSync 追加写入

// 追加写入
fs.appendFile('./座右铭.txt','择其善者而从之,其不善者而改之', err => {
    if (err) {
        console.log("追加写入失败");
        return;
    }
    console.log("追加写入成功");
});

createWriteStream 流式写入

let ws = fs.createWriteStream('./观书有感.txt');
ws.write('半亩方塘一鉴开\r\n');
ws.write('天光云影共徘徊\r\n');
ws.write('问渠那得清如许\r\n');
ws.write('为有源头活水来\r\n');
ws.end()

程序打开一个文件是需要消耗资源的 ,流式写入可以减少打开关闭文件的次数。
流式写入方式适用于 大文件写入或者频繁写入 的场景, writeFile 适合于 写入频率较低的场景。

写入文件的场景

文件写入 在计算机中是一个非常常见的操作,下面的场景都用到了文件写入:

  • 下载文件
  • 安装软件
  • 保存程序日志,如 Git
  • 编辑器保存文件
  • 视频录制
需要持久化保存数据 的时候,应该想到 文件写入

3.2、文件读取

readFile 异步读取

// 读取文件
fs.readFile('./观书有感.txt', 'utf-8',(err, data) => {
    if(err) throw err;
    console.log(data);
});

readFile 同步读取

let data2 = fs.readFileSync('./观书有感.txt', 'utf-8');

createReadStream 流式读取

//创建读取流对象
let rs = fs.createReadStream('./观书有感.txt', 'utf-8');
//每次取出 64k 数据后执行一次 data 回调
rs.on('data', data => {
    console.log(data);
    console.log(data.length);
});
//读取完毕后, 执行 end 回调
rs.on('end', () => {
    console.log('读取完成')
})

读取文件应用场景

  • 电脑开机
  • 程序运行
  • 编辑器打开文件
  • 查看图片
  • 播放视频
  • 播放音乐
  • Git 查看日志
  • 上传文件
  • 查看聊天记录

3.3、文件移动与重命名

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

fs.rename('./观书有感.txt', './论语/观书有感.txt', (err) =>{
    if(err) throw err;
    console.log('移动完成')
});
fs.renameSync('./座右铭.txt', './论语/我的座右铭.txt');

3.4、文件删除

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

fs.unlink('./data.txt', err => {
    if(err) throw err;
    console.log('删除成功');
});
fs.unlinkSync('./data1.txt');

3.5、文件夹操作

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

mkdir 创建文件夹

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

//异步创建文件夹
fs.mkdir('./page', err => {
    if(err) throw err;
    console.log('创建成功');
});
//递归异步创建
fs.mkdir('./1/2/3', {recursive: true}, err => {
    if(err) throw err;
    console.log('递归创建成功');
});
//递归同步创建文件夹
fs.mkdirSync('./x/y/z', {recursive: true});

readdir 读取文件夹

//异步读取
fs.readdir('./论语', (err, data) => {
    if(err) throw err;
    console.log(data);
});
//同步读取
let data = fs.readdirSync('./论语');
console.log(data);

rmdir 删除文件夹

//异步删除文件夹
fs.rmdir('./page', err => {
    if(err) throw err;
    console.log('删除成功');
});
//异步递归删除下面的文件夹
fs.rmdir('./1', {recursive: true}, err => {
    if(err) {
        console.log(err);
    }
    console.log('递归删除')
});
//同步递归删除下面的文件夹
fs.rmdirSync('./x', {recursive: true})

3.6、查看资源状态

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

//异步获取状态
fs.stat('./观书有感.txt', (err, data) => {
    if(err) throw err;
    console.log(data);
});
//同步获取状态
let data = fs.statSync('./观书有感.txt');

结果值对象结构:

  • size 文件体积
  • birthtime 创建时间
  • mtime 最后修改时间
  • isFile 检测是否为文件
  • isDirectory 检测是否为文件夹

   ......

3.7、相对路径问题

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

相对路径

  • ./座右铭.txt 当前目录下的座右铭.txt
  • 座右铭.txt 等效于上面的写法
  • ../座右铭.txt 当前目录的上一级目录中的座右铭.txt

绝对路径

  • D:/Program Files windows 系统下的绝对路径
  • /usr/bin Linux 系统下的绝对路径

3.8、__dirname

__dirname require 类似,都是 Node.js 环境中的'全局'变量。
__dirname 保存着 当前文件所在目录的绝对路径 ,可以使用 __dirname 与文件名拼接成绝对路径。

let data = fs.readFileSync(__dirname + '/观书有感.txt', 'utf-8');

使用 fs 模块的时候,尽量使用 __dirname 将路径转化为绝对路径,这样可以避免相对路径产生的Bug

四、Path模块

path 模块提供了 操作路径 的功能,我们将介绍如下几个较为常用的几个 API:

const path = require('path');

//获取路径分隔符
console.log(path.sep); // \
//拼接绝对路径
console.log(path.resolve(__dirname, 'test')); // D:\study\nodejs\projects\node_learn\test
//解析路径
let pathname = 'D:/program file/nodejs/node.exe';
console.log(path.parse(pathname));
//获取路径基础名称
console.log(path.basename(pathname)) // node.exe
//获取路径的目录名
console.log(path.dirname(pathname)); // D:/program file/nodejs
//获取路径的扩展名
console.log(path.extname(pathname)); // .exe

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1447946.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深刻反思现代化进程:20世纪与21世纪的比较分析及东西方思想家的贡献

深刻反思现代化进程&#xff1a;20世纪与21世纪的比较分析及东西方思想家的贡献 摘要&#xff1a;随着人类社会的快速发展&#xff0c;现代化已成为全球范围内的普遍追求。然而&#xff0c;20世纪至21世纪的现代化进程并非一帆风顺&#xff0c;它伴随着环境破坏、社会不平等和文…

Swift Combine 使用 flatMap 和 catch错误处理 从入门到精通十三

Combine 系列 Swift Combine 从入门到精通一Swift Combine 发布者订阅者操作者 从入门到精通二Swift Combine 管道 从入门到精通三Swift Combine 发布者publisher的生命周期 从入门到精通四Swift Combine 操作符operations和Subjects发布者的生命周期 从入门到精通五Swift Com…

vue3 之 商城项目—购物车

购物车业务逻辑梳理拆解 1️⃣整个购物车的实现分为两个大分支&#xff0c;本地购物车操作和接口购物车操作 2️⃣由于购物车数据的特殊性&#xff0c;采取Pinia管理购物车列表数据并添加持久话缓存 本地购物车—加入购物车实现 stores/cartStore.js // 封装购物车模块 imp…

前端秘法基础式(HTML)(第一卷)

目录 一.img标签 1.src属性 2.alt/title/width/height/border属性 二.a标签 1.href属性 2.target属性 三.表格/列表标签 1.表格标签 ​编辑 2.列表标签 2.1无序列表 2.2有序列表 一.img标签 1.src属性 img标签必须搭配src来使用,src用来指定路径 注意这里的src不…

【王道数据结构】【chapter5树与二叉树】【P158t10】

已知二叉树以二叉链表存储&#xff0c;编写算法完成&#xff1a;对于树种每个元素值为x的结点&#xff0c;删除以它为根的子树&#xff0c;并释放相应的空间 #include <iostream> #include <queue> typedef struct treenode{char data;struct treenode *left;struc…

CorelDRAW2024国内专业个人免费版下载

CorelDRAW是一款屡获殊荣的图形和图像编辑软件&#xff0c;包含两个绘图应用程序&#xff1a;一个用于矢量图及页面设计&#xff0c;另一个用于图像编辑。自1989年进入中国市场以来&#xff0c;CorelDRAW不断推出新的版本和功能&#xff0c;以满足用户不断变化的需求。 CorelD…

安装 NVIDIA Chat with RTX

安装 NVIDIA Chat with RTX 0. NVIDIA Chat with RTX 是什么&#xff1f;1. 安装 NVIDIA Chat with RTX2. 使用 NVIDIA Chat with RTX3. NVIDIA Chat with RTX 下载地址 0. NVIDIA Chat with RTX 是什么&#xff1f; Chat With RTX 是一款演示应用程序&#xff0c;可让您个性化…

2.8:Maefile、计算单词个数、判断文件类型、单词逆置

1.有main.c&#xff0c;test.c&#xff0c;test1.c&#xff0c;创建Makefile 程序代码&#xff1a; Makefile: 1 CCgcc2 EXEhello3 OBJS$(patsubst %.c,%.o,$(wildcard *.c))4 CFLAGS-c -o5 all:$(EXE)6 7 #hello依赖test.o main.o8 $(EXE):$(OBJS)9 $(CC) $^ -o $10 …

输出用“*”组成的X形图案。

输出用“*”组成的X形图案 输入描述&#xff1a; 多组输入&#xff0c;一个整数&#xff08;2~20&#xff09;&#xff0c;表示输出的行数&#xff0c;也表示组成“X”的反斜线和正斜线的长度。 输出描述&#xff1a; 针对每行输入&#xff0c;输出用“*”组成的X形图案。 …

波奇学Linux:文件缓冲区

问题导入 文件流输出直接向显示器和重定向文件有不一样的表现 分别向显示器文件输出四个语句&#xff0c;最后fork创建子进程。 当程序运行时和程序重定向到文件中&#xff0c;输出的内容不一样。 重定向时c库函数&#xff08;printf,fprintf,fwrite&#xff09;调用了两次&…

片上网络NoC(3)——拓扑指标

目录 一、概述 二、指标 2.1 与网络流量无关的指标 2.1.1 度&#xff08;degree&#xff09; 2.1.2 对分带宽&#xff08;bisection bandwidth&#xff09; 2.1.3 网络直径&#xff08;diameter&#xff09; 2.2 与网络流量相关的指标 2.2.1 跳数&#xff08;hop coun…

JAVA设计模式之中介者模式详解

中介者模式 1 中介者模式介绍 提到中介模式&#xff0c;有一个比较经典的例子就是航空管制。 为了让飞机在飞行的时候互不干扰&#xff0c;每架飞机都需要知道其他飞机每时每刻的位置&#xff0c;这就需要时刻跟其他飞机通信。飞机通信形成的通信网络就会无比复杂。这个时候&…

【王道数据结构】【chapter5树与二叉树】【P158t6】

二叉树按二叉链表形式存储&#xff0c;试编写一个判别二叉树是否是完全二叉树的算法 #include <iostream> #include <queue> typedef struct treenode{char data;struct treenode *left;struct treenode *right; }treenode,*ptreenode;ptreenode buytreenode(char …

3dmax云渲染怎么使用?渲染100邀请码1a12

本文为大家整理了3dmax云渲染的使用教程&#xff0c;一起来看看吧。案例&#xff1a;渲染效果图&#xff0c;插件方式提交必备工具&#xff1a;渲染100客户端 1、进入渲染100官网(http://www.xuanran100.com/?ycode1a12)注册账号&#xff0c;记得注册时填邀请码1a12&#xff0…

UnityShader——03图形硬件简史与可编程管线

图形硬件简史与可编程管线 GPU发展简史 GPU英文全称Graphic Processing Unit&#xff0c;中文翻译为“图形处理器”&#xff0c;在现代计算机系统中的作用变得越来越重要 20世纪六七十年代&#xff0c;受硬件条件的限制&#xff0c;图形显示器只是计算机输出的一种工具&…

LeetCode、136. 只出现一次的数字【简单,位运算】

文章目录 前言LeetCode、136. 只出现一次的数字【简单&#xff0c;位运算】题目链接与分类思路异或一遍运算 资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技术…

【蓝桥杯】灭鼠先锋

一.题目描述 二.解题思路 博弈论&#xff1a; 只能转移到必胜态的&#xff0c;均为必败态。 可以转移到必败态的&#xff0c;均为必胜肽。 最优的策略是&#xff0c;下一步一定是必败态。 #include<iostream> #include<map> using namespace std;map<string,bo…

Java之拦截器interceptor

1. 概念 2. 步骤 第一步 第二步 参考资料 https://www.bilibili.com/video/BV1m84y1w7Tb?p168&vd_source705343a89f38d5c0d895383ccf38a5d6

VS Code主题设置(美化VS Code)

主题的具体效果放在了文章末尾&#xff0c;这篇文章后续也会进行更新 目录 切换整体主题&#xff08;整体主题&#xff09; 1.VS Code内置主题&#xff08;快捷键&#xff1a;CtrlK &#xff0c;CtrlT&#xff09; 1.VS Code左上角点击文件 2.选择首选项-->主题-->颜色…

LeetCode、1318. 或运算的最小翻转次数【中等,位运算】

文章目录 前言LeetCode、1318. 或运算的最小翻转次数【中等&#xff0c;位运算】题目链接与分类题解位运算 资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技术领…