首页 > 编程语言 >NodeJs学习笔记

NodeJs学习笔记

时间:2023-12-12 14:44:21浏览次数:30  
标签:fs http NodeJs require 笔记 console 学习 const response

目录

Node Js

Buffer (缓冲区)

概念

buffer[缓冲区] ,是一个类似于数组的对象,是一段固定长度的内存空间,用于处理二进制数据。

image-20231012131714100

特点

  • Buffer大小固定且无法更改
  • Buffer性能较好,直接对计算机内存
  • 每个元素的大小为一个字节 ( byte)

使用

  1. 创建Buffer
  • alloc方法

    •   let buf = Buffer.alloc(10)
      
    • 使用alloc方法创建的Buffer每一个二进制位都为00

    •   <Buffer 00 00 00 00 00 00 00 00 00 00>
      
  • allocUnsafe方法

    •   let buf_2 = Buufer.allocUnsafe(10)
      
    • 使用alloc方法创建的Buffer==其中可能包含旧的内存数据

    •   <Buffer 01 10 11 22 33 66 00 00 00 00>
      
    • 优点: 比alloc快一点 缺点:比alloc危险

  • from方法

    •   let buf_3 = Buffer.from('hello')
      
    •   <Buffer 68 65 6c 6c 6f>
      
    • 此处的HELLO中的 H对应的是 68 ,原因是H的ASCii码是104(十进制),104 转换成 16进制 变成了 68

  1. Buffer与字符串的转换
  • toString方法

    •   let buf_4 = Buffer.from([105,108,111,118,101,121,111,117])
        console.log(buf_4.toString())
      
    • buffer不使用tostring,只会把16进制转为10进制,但使用了tostring就会多加一步,从十进制通过ascii转为字符

    • toString()是转换字符串,toString (2)是转化为2进制,尤其注意!!!!

    • graph LR A[16进制] -->B(10进制) B-->|toString|D[字符串]
  1. Buffer的读写
  • []方式

    • 读取

      •   buf_3[1]
        
    • 修改

      •   buf_3[1] = 97
        
      • ps:1. 如果一个修改的数值超过255(10进制),则其超过八位数据会舍弃(一个十六进制数对应8位二进制,8为二进制上限表示十进制255)

      • ​ 2.一个utf-8字符一般占3个字节

        let buf -Buffer.from('你好')
        <Buffer e4 bd a0 e5 e5 bd>//这里之所以只有6个16进制是因为一个中文对应三个位置
        ```
      

计算机基础

进程与线程

程序的运行就是一个进程,线程是一个进程中执行的执行流,一个进程有多个线程,不存在属于进程的线程

image-20231012150745683

就好比:蜜雪冰城门店(进程)是由多个员工(线程)一起干活,每个员工干不同的活

fs模块

实现与硬盘的交互,例如文件的创建,删除,重命名,移动,文件内容的写入读取,文件夹的操作

写入文件

① .writeFile 异步写入

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

参数说明:

  • file 文件名
  • data 待写入的数据
  • options 选项设置(可选) ==> ① {flag: ‘a’} 追加写入
  • callback 写入回调

返回值:undefined

需求:新建一个文件”座右铭.txt”写入内容,三人行,必有我师

1.导入fs模块
const fs = require('fs');
2.写入文件
fs.writefile("./座右铭.txt','三人行,必有我师',err => {
       if(err){//err值有两种情况,写入成功为null,写入失败为提示失败原因
       console.log('写入失败')
       return
       }
       console.log('写入成功')
       })

② .writeFileSync 同步写入

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

参数说明:

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

需求:新建一个文件”座右铭.txt”写入内容,三人行,必有我师

1.导入fs模块
const fs = require('fs');
2.写入文件
fs.writefileSync("./座右铭.txt','三人行,必有我师')

③ .appendFile/appendFileSync 追加写入

功能:appendFile实在文件尾部追加内容

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

fs.appendFileSync(file,data[ , options])

返回值:二者都为undefined

实例代码:

异步

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

同步

fs.appendFileSync('./座右铭.txt','/r/n温故而知新,可以为师矣')

④ .createWriteStream 流式写入

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

参数说明:

  • path 文件路径
  • options 选项配置(可选)

返回值:Object

代码示例:

const fs = require('fs')
// 创建写入流对象
const ws = fs.createWriteStream('./观书有感.txt');
//write
ws.write('a')
ws.write('b')
ws.write('c')
//关闭通道
ws.close()   or   ws.end()
程序打开一个文件是需要消耗资源的,流式写入可以减少打开文件的次数.
流式写入方式适用于大文件写入或者频繁写入的场景,writeFile适合于写入频率较低的场景

需要写入文件的场景

需要持久化保存数据的时候,应该想到文件写入

  • 下载文件
  • 安装软件
  • 保存文件日志,如git

文件读取

①.readFile 异步读取

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

参数说明:

  • path 文件路径
  • options 选项配置
  • callback 回调函数

返回值: undefined

代码示例:

const fs = require('fs');
fs.readFile('./观书有感.txt',(err,data)=>{
if(err){
  console.log('读取失败')
  return;
}
console.log(data.toString());//不加toString读取出来的是buffer
})

②.readFileSync 同步读取

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

参数说明:

  • path 文件路径
  • options 选项配置

返回值: undefined

代码示例:

let data = fs.readFileSync('./观书有感.txt')
console.log(data)

③.createReadStream 流式读取

const fs = require ('fs')
1.创建读取流对象
const rs = fs.createReadStream('../资料/笑看风云.mp4')
2.绑定data事件   chunk == 数据块
rs.on('data',chunk =>{
console.log(chunk);//输出为buff
})
3. end 可选事件
rs.on('end'),()=>{
  console.log('读取完成')
})

读取文件应用场景

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

文件移动与重命名

语法:fs.rename(oldpath,newpath,callback)

fs.renameSync(oldPath,newPath)

参数说明:

  • oldPath 文件当前路径
  • newPath 文件新的路径
  • callback 操作后的回调

代码示例:

const fs =require('fs')

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

//重命名文件
fs.rename('./座右铭.txt','./论语.txt',(err) =>{
if(err) throw err;
console.log('移动完成')
})
fs.renameSync('./座右铭.txt','./论语.txt')

文件删除

语法: fs.unlink(path , callback)

fs.unlinkSync(path)

参数说明:

  • path 文件路径
  • callback 操作后的回调

代码示例:

const fs = require('fs')

//异步
fs.unlink('./test.txt',err =>{
if(err) throw err;
console.log('删除成功')
})
//同步
fs.unlinkSync('./test2.txt')

② rm法

语法: ·fs.rm(path , callback)

fs.rmSync(path)

参数说明:

  • path 文件路径
  • callback 操作后的回调

代码示例:

const fs = require('fs')

//异步
fs.rm('./test.txt',err =>{
if(err) throw err;
console.log('删除成功')
})
//同步
fs.rmSync('./test2.txt')

文件夹操作

包含文件夹创建删除读取

语法:

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

创建文件夹

​ ①普通创建

const fs =require ('fs')

fs.mkdir('./html',err=>{

if(err){
console.log('创建失败')
}

console.log('创建成功')
})

​ ②递归创建

const fs =require ('fs')

fs.mkdir('./a/b/c',{recursive: true},err=>{    //{recursive: true}递归创建的设置

if(err){
console.log('创建失败')
}

console.log('创建成功')
})

读取文件夹

const fs =require ('fs')
读取文件夹
fs.readdir('../资源',(err,data)=>{
if(err){
  console.log('读取失败')
  return;}
console.log(data)
})

删除文件夹

​ ①单个删除

const fs =require ('fs')
删除文件夹
fs.rmdir('./html', err=>{
if(err){
console.log('删除失败')
return
}
console.log('删除成功')
}
)

​ ②递归删除

​ //不推荐使用

const fs =require ('fs')
删除文件夹
fs.rmdir('./a', {recursive:true},err=>{
if(err){
console.log('删除失败')
return
}
console.log('删除成功')
}
)

​ //推荐使用

const fs =require ('fs')
删除文件夹
fs.rm('./a', {recursive:true},err=>{
if(err){
console.log('删除失败')
return
}
console.log('删除成功')
}
)

查看资源状态

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

fs.statSync(path[ ,options])

参数说明:

  • path 文件夹路径
  • options 选项配置
  • callback 操作后的回调

示例代码:

//异步
fs.stat('./data.txt',(err,data) =>{
if(err) throw err;
console.log(data);
})
//同步
let data = fs.statSync('./data.txt');

PS: 目标.isFile可以查看目标是否为文件

  		目标==.isDirectory==可以查看目标是否为文件夹

相对路径与绝对路径补充说明

  • 相对路径
    • ./座右铭.txt 当前目录下的座右铭.txt
    • 座右铭.txt 等效于上面的写法
    • ../座右铭.txt 当前目录的上一级目录中的座右铭.txt
  • 绝对路径
    • D:/Program Files windows系统下的绝对路径
    • /user/bin linux系统下的绝对路径

相对路径中所谓的当前目录,指的是命令行的工作目录,而非是文件的所在目录

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

如下

标签:fs,http,NodeJs,require,笔记,console,学习,const,response
From: https://www.cnblogs.com/Agnoi/p/17896774.html

相关文章

  • 开源机器学习版本的Github:Hugging Face
    参考:https://baijiahao.baidu.com/s?id=1776478347325976510https://zhuanlan.zhihu.com/p/535100411 ===============================   ......
  • js笔记
    js基础javascript是基于对象和事件驱动的脚本语言。//直接在页面中嵌入脚本<script>alert('弹窗警告');document.write("在浏览器上输出文字");console.log("这句话会在控制台显示,在浏览器上按f12呼出控制台");</script>//引用外部脚本,注意:此处只能使用相对路径,或网络路......
  • 42K+ star!开源Notion 平替笔记推荐
    IT咖啡馆,探索无限可能!恭喜你发现了这个宝藏,这里你会发现优质的开源项目、IT知识和有趣的内容。今天我们来推荐一款在GitHub超过43KStar的开源项目:AppFlowy。提到笔记和知识管理,很多人都会想到大名鼎鼎的Notion,无论是项目管理、笔记整理,还是团队合作,Notion都以直观、灵活的界面满......
  • 我的心血之作:一套适合 SAP UI5 从业人员从入门到进阶的学习教程,以及教程背后的故事
    一转眼2023年又要结束了。我从2007年开始,以软件开发工程师的角色进入职场,马上也快满17年了。在这快17年的软件开发职业生涯里,我也见识并使用了许许多多的开发技术,编程语言,开发框架,平台。IT界这十多年来涌现出的一些新技术,我也主动或被动地去追逐过。比如2015年时,大数据......
  • 硬件开发笔记(十六):RK3568底板电路mipi摄像头接口原理图分析、mipi摄像头详解
    前言  本篇继续分析底板原理图mipi电路原理图、mipi摄像头输入硬件接口详解。<br>RK3568芯片摄像头接口  查看RK3568的芯片手册,摄像头接口并不支持直接sensor模拟信号输入,只能接收mipi信号,RK3568的摄像头接口引脚如下:    只支持mipi的数字信号摄像头。  本来计划......
  • 硬件开发笔记(十六):RK3568底板电路mipi摄像头接口原理图分析、mipi摄像头详解
    前言  本篇继续分析底板原理图mipi电路原理图、mipi摄像头输入硬件接口详解。 RK3568芯片摄像头接口  查看RK3568的芯片手册,摄像头接口并不支持直接sensor模拟信号输入,只能接收mipi信号,RK3568的摄像头接口引脚如下:    只支持mipi的数字信号摄像头。  本......
  • shell脚本基础学习
    shell脚本基础学习一.shell的解释:shell具备编程的能力shell是一种解释型语言(不需要提前编译,一边执行一边解释,每种解释性语言都有解释器)shell语言支持大部分编程语言都具备的功能(if判断,for循环,变量,数组,函数,加减乘除,逻辑运算)二.shell脚本的规范模板tips:shell脚本的本......
  • 数据库学习
    前言IDEA集成了众多插件,方便开发者使用,使用其自带的Database模块就可以很方便的配置、连接到数据库。查看MySQL运行状态先启动MySQL,快捷键win+r然后输入services.msc,查找MySQL然后启动MySQLServer。IDEA开启数据库连接模块点击View->ToolWindows->Database开启数据库模块......
  • 【定义类】二功能测试学习给一个新网站如何测试
    -------------软件测试是什么-----依据需求熟悉业务,确定测试范围,设计测试用例,等开发完成后,用手动或自动化执行被测软件,检测预期和实际结果是否一致,如不一致提交BUG,再次交给开发修改,开发修改完成后,执行回归测试,所有用例执行完成后,交给客户做验收测试这个面试题给一个水杯如何......
  • Pydantic模块学习
    Pydantic是一个Python库,用于数据验证和设置强类型数据结构。它是一个数据验证库,专门设计用于数据解析和验证,尤其在处理用户输入、API请求等情境中很有用。以下是Pydantic的一些主要特点和用法: 使用Pydantic主要涉及以下几个步骤:定义数据模型:创建一个继承自pydantic......