node.js入门—day02

个人名片:
😊作者简介:一名大二在校生
🤡 个人主页:坠入暮云间x
🐼
座右铭:给自己一个梦想,给世界一个惊喜。
🎅**学习目标: 坚持每一次的学习打卡

文章目录

    • 什么是单线程与多线程?
    • 异步编程
    • 什么是回调函数?
    • 文件模块
      • 1.fs.readFile()
      • 2.fs.readFileSync()
      • 3.fs.writeFile()
      • 4.fs.writeFileSync()
      • 5.fs.appendFile()
      • 6.文件复制
      • 7.获取文件信息
      • 8.删除文件
      • 练习
    • Path模块
      • 1.path.join()方法
      • 2.path.basename()方法
      • 3.path.extname()方法
    • OS模块

什么是单线程与多线程?

单线程:可以简单的理解为在同一时间只处理一件事情
多线程:可以理解为在同一时间同时处理多件事情
如图所示
在这里插入图片描述

异步编程

同步:如果每件事情是按照顺序依次进行的(自上而下一行一行的执行)

  • 可能会因为代码执行慢导致阻塞出现
  • Node.js中同步方法一般都带Sync字样
//同步
console.log('吃饭');
console.log('睡觉');
console.log('打豆豆');
function eat(){console.log('开始吃饭');console.log('吃饭');
}
eat();console.log('上课');

在这里插入图片描述

异步:多件事情同步进行即异步

  • Node.js通过异步/回调来解决阻塞问题
  • 应用程序发起 I/O请求(出现阻塞) 后仍继续执行,当内核 I/O 操作完成后会通过回调函数处理后续工作
// 异步
console.log('吃饭');
console.log('睡觉');
console.log('打豆豆');
function eat(callback){console.log('开始吃饭');setTimeout(function(){callback('吃饭结束')},1000);
}
eat((msg)=>{console.log(msg);
});console.log('上课');

在这里插入图片描述

什么是回调函数?

回调函数是指函数可以被传递到另一个函数中,并在被调用函数执行完毕后被调用。
基本概念:

  1. 回调:指被传入到另一个函数的函数。

  2. 异步编程:指在代码执行时不会阻塞程序运行的方式。

  3. 事件驱动:指程序的执行是由外部事件触发而不是顺序执行的方式。

回调函数的使用场景包括:

  1. 事件处理:回调函数可以用于处理各种事件,例如鼠标点击、键盘输入、网络请求等。

  2. 异步操作:回调函数可以用于异步操作,例如读取文件、发送邮件、下载文件等。

  3. 数据处理:回调函数可以用于处理数据,例如对数组进行排序、过滤、映射等。

  4. 插件开发:回调函数可以用于开发插件,例如 WordPress 插件、jQuery 插件等。

//匿名回调函数
function addCallback(num1,num2,callback){const sumAdd= num1*num2;callback(sumAdd)
}
addCallback(5,9,function(result){console.log("相乘的积为"+result);
})

在这里插入图片描述

文件模块

1.fs.readFile()

作用:读取文件内容
语法:fs.readFile(filename, [options], callback); //读取文件

  • path:必选参数,字符串,表示文件的路径;
  • options:可选参数,表示以什么编码格式来读取文件
  • callback:必选参数,文件读取完成后,通过回调函数拿到读取的结果
    代码示例如下:
//1.导入fs模块const fs=require('fs');
//2.fs.readFile()  异步读取文件内容
//文件不存在将会报错
fs.readFile('./data/a.txt',(err,data)=>{if(err){console.log('读取文件失败');}else{//toString() 将转化成utf-8, 将二进制数据按照指定字符编码格式转换成字符串console.log(data.toString());}
})

2.fs.readFileSync()

作用:同步读取文件内容
语法:fs.readFileSync(path,data,options)
path :<string> | <Buffer> | <URL> | <integer> 文件名或文件描述符;
options :<Object> | <string>
 encoding <string> | <null> 默认值: null
 flag <string>

//3.fs.readFileSync() 同步读取文件内容
//如果文件不存在,将会报错 。  使用同步读取文件应该捕获异常通过try/catch进行捕获
try{const data=fs.readFileSync('./data/b.txt')
}catch(e){console.log(e);
}

在这里插入图片描述

3.fs.writeFile()

作用:异步写入文件
语法:fs.writeFile(path,data[, options], callback)

其中参数使用说明如下:
file :`<string> | <Buffer> | <URL> | <integer>`,文件名或文件描述符;
data: `<string> | <Buffer> | <TypedArray> | <DataView>,`要写入文件的数据;
options: `<Object> | <string>`encoding <string> | <null> 默认值: 'utf8'mode <integer> 默认值: 0o666flag <string> 参阅支持的文件系统标志,默认值: 'w',flag取值见表3-1
callback: <Function>,回调函数
	err <Error>,回调函数只包含错误信息参数(err),在写入失败时返回

//1.导入fs模块
const fs=require('fs');//异步写入,如果文件不存在,则会新建一个文件
//默认是从文件头开始写入,并且会覆盖之前写的内容
fs.writeFile('./data/b.txt','锄禾日当午,汗滴禾下土',(err)=>{if(err){console.log('写入失败');return}console.log('写入成功');
})

在这里插入图片描述

4.fs.writeFileSync()

作用:同步方法—文件写入
语法:fs.writeFileSync(path,data,options)

其中参数使用说明如下:
file :<string> | <Buffer> | <URL> | <integer>,文件名或文件描述符;
data: <string> | <Buffer> | <TypedArray> | <DataView>,要写入文件的数据;
options: <Object> | <string>
	encoding <string> | <null> 默认值: 'utf8'
	mode <integer> 默认值: 0o666
	flag <string> 参阅支持的文件系统标志,默认值: 'w',flag取值见表3-1
//同步写入
try{fs.writeFileSync('./data/c.txt','谁知盘中餐,粒粒皆辛苦')
}catch(e){console.log(e);
}

5.fs.appendFile()

作用:文件追加内容
语法:fs.appendFile(path, data[, options], callback)

file :<string> | <Buffer> | <URL> | <integer>,文件名或文件描述符;
data: <string> | <Buffer> | <TypedArray> | <DataView>,要写入文件的数据;
options: <Object> | <string>
encoding <string> | <null> 默认值: 'utf8'
mode <integer> 默认值: 0o666
flag <string> 参阅支持的文件系统标志,默认值: 'a',flag取值见表3-1
callback: <Function>,回调函数
err <Error>,回调函数只包含错误信息参数(err),在写入失败时返回

6.文件复制

作用:复制文件内容
语法:

fs.copyFile(src, dest[, model], callback)
fs.copyFileSync(src, dest[, model], callback)
其中参数使用说明如下:
src <string> | <Buffer> | <URL> 要拷贝的源文件名;
dest <string> | <Buffer> | <URL> 拷贝操作的目标文件名;
mode <integer> 用于拷贝操作的修饰符。默认值: 0;
callback: <Function>,回调函数
err <Error>,回调函数只包含错误信息参数(err),在写入失败时返回
//复制文件
//1.导入fs模块
const fs=require('fs');//复制文件
fs.copyFile('./data/b.txt','./data/d.txt',(err)=>{if(err){console.log('复制失败');}console.log('复制成功');
})

7.获取文件信息

语法:

fs.stat(path, callback)
fs.statSync(path)

//获取文件信息
fs.stat('./data/b.txt',(err,stats)=>{if(err){console.log('获取文件信息失败');return}//isFile()判断是否是文件//isDirectory()判断是否是文件夹console.log(stats.isFile());console.log(stats.isDirectory());console.log(stats);
})

在这里插入图片描述

8.删除文件

语法:

fs.rm(path,callback)
fs.unlink(path,callback)
//删除文件//1.导入fs模块
const fs=require('fs');fs.rm('./data/d.txt',(err)=>{if(err){console.log(err);return}else{console.log('删除成功');}
})
fs.unlink('./data/b.txt',(err)=>{if(err){console.log(err);return}else{console.log('删除成功');}
})
fs.open(filename, flags, [mode], callback); //打开文件
fs.mkdir(path, [mode], callback); //创建目录:
fs.readdir(path, callback); //读取目录
fs.exists(path, callback); //查看文件与目录是否存在

练习

编写程序:
将文件a.txt和文件b.txt的内容读取后写入文件c.txt中。

//1.导入fs模块
const fs = require('fs');
fs.readFile('./data/a.txt', (err, dataA) => {if (err) {console.log('读取文件失败');} else {//toString() 将转化成utf-8, 将二进制数据按照指定字符编码格式转换成字符串// console.log(dataA.toString());fs.readFile('./data/b.txt', (err, dataB) => {if (err) {console.log('读取文件失败');             } else {const dataC = dataA + dataB;fs.writeFile('./data/c.txt', dataC, (err) => {if (err) {console.log('读取文件失败');                       } else {//toString() 将转化成utf-8, 将二进制数据按照指定字符编码格式转换成字符串console.log('文件读写成功');}})}})}
})

Path模块

path路径模块:用来处理路径的模块。它提供了一系列的方法和属性,用来满足用户对路径的处理需求

1.path.join()方法

作用:用来将多个路径片段拼接成一个完整的路径字符串
语法:path.join([..pahs])

在这里插入图片描述

2.path.basename()方法

作用:用来从路径字符串中,将文件名解析出来
语法:const path=require('path')
代码示例:

//导入path
const path=require('path');const fpath='/a/b/c/index.html';//文件的存放路径
// let fullName=path.basename(fpath);
// console.log(fullName)const  nameWithoutExt=path.basename(fpath,'.html')
console.log(nameWithoutExt)

在这里插入图片描述

3.path.extname()方法

作用:可以获取路径中的扩展名部分
语法:pah.extname(path)
代码示例:

const path=require('path');
const fpath='/a/b/c/index.html';//文件的路径
const fext=path.extname(fpath)
console.log(fext)//输出.html

在这里插入图片描述

path.dirname(path); // 返回path的目录名
path.normalize(path);//路径解析,得到规范路径
path.isAbsolute(path); //判断路径是否是绝对路径
path.relative(form,to); //方法根据当前工作目录返回从from 到to的相对路径
path.resolve([...paths]); //将路径或路径片段的序列解析为绝对路径

OS模块

var os = require("os") //引入 os 模块
os.cpus(); //返回每个逻辑cpu内核信息
os.hostname(); //返回操作系统的主机名
os.platform(); //返回标识操作系统平台的字符串
os.userInfo([options]); //返回关于当前有效用户的信息

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp微信小程序_拍照从相册选择

userImg() {let that thisuni.chooseMedia({count: 1,mediaType: [image, video],sourceType: [album, camera],maxDuration: 30,camera: back,success(res) {console.log(res.tempFiles[0].tempFilePath)that.imagUrl res.tempFiles[0].tempFilePath}})}, 直接调用api即可,注…

GPT实战系列-如何让LangChain的Agent选择工具

GPT实战系列-如何让LangChain的Agent选择工具 LangChain GPT实战系列-LangChain如何构建基通义千问的多工具链 GPT实战系列-构建多参数的自定义LangChain工具 GPT实战系列-通过Basetool构建自定义LangChain工具方法 GPT实战系列-一种构建LangChain自定义Tool工具的简单方法…

手动创建线程池各个参数的意义?

今天我们学习线程池各个参数的含义&#xff0c;并重点掌握线程池中线程是在什么时机被创建和销毁的。 线程池的参数 首先&#xff0c;我们来看下线程池中各个参数的含义&#xff0c;如表所示线程池主要有 6 个参数&#xff0c;其中第 3 个参数由 keepAliveTime 时间单位组成。…

一、C#冒泡排序算法

一、C#冒泡排序算法 简介 冒泡排序算法是一种基础的排序算法&#xff0c;它的实现原理比较简单。核心思想是通过相邻元素的比较和交换来将最大&#xff08;或最小&#xff09;的元素逐步"冒泡"到数列的末尾。 实现原理 冒泡排序是一种简单的排序算法&#xff0c;其…

《Ubuntu20.04环境下的ROS进阶学习4》

一、发布地图消息 在上一小节中我们已经获取到了激光雷达的数据&#xff0c;在本接中我们将学习地图数据格式和如何发布地图数据。 二、了解地图数据格式 首先登录 index.ros.org 网站搜索一下map_server消息包。您也可以直接搜这个网址 map_server - ROS Wiki &#xff0c;下翻…

matplotlib-直方图

日期&#xff1a;2024.03.114 内容&#xff1a;将matplotlib的常用方法做一个记录&#xff0c;方便后续查找。 # 引入需要的库 from matplotlib import pyplot as plt import numpy as np# 设置画布大小 plt.figure(figsize (20,8),dpi 200)# 全局设置中文字体 plt.rcParams…

独立开发的轻量级简洁开源论坛BBS PHP源码 – 2023新版发布

最新的轻量级开源论坛php源码发布啦&#xff01;这是一款独立开发的论坛系统&#xff0c;可以帮助你快速地开发出你想要的网站。 如果你是PHP初学者&#xff0c;这款论坛系统非常适合你入门学习。不过&#xff0c;需要注意的是&#xff0c;由于它并没有进行商业化改造&#xf…

VC-旅游系统-213-(代码+说明)

转载地址: http://www.3q2008.com/soft/search.asp?keyword旅游系统 旅游信息管理系统开题报告 一、研究目的 旅游信息管理系统能帮助旅行社在游客的市场开拓、游客的信息管理、客户服务等方面进行综合处理。使旅行社能够准确的掌握客户的市场动态&#xff0c;充分了解对客户…

Python自学☞序列和索引的相关操作

一、基本概念 1、概念 序列是一个用于存储多个值的连续空间&#xff0c;每个值都对应一个整数的编号&#xff0c;称为索引 2、切片的语法结构 注&#xff1a;切片可以访问序列一定范围内的元素 序列[start&#xff1a;end&#xff1a;step] start-->切片的开始索…

Linux操作系统——线程概念

1.什么是线程&#xff1f; 在一个程序里的一个执行路线就叫做线程&#xff08;thread&#xff09;。更准确的定义是&#xff1a;线程是“一个进程内部的控制序列”一切进程至少都有一个执行线程线程在进程内部运行&#xff0c;本质是在进程地址空间内运行在Linux系统中&#x…

AI系统性学习01- Prompt Engineering

文章目录 面向开发者的Prompt Engineering简介Prompt设计原则1 环境配置2.两个基本原则2.1 原则1&#xff1a;编写清晰、具体的指令2.1.1 策略一&#xff1a;分割2.1.2 策略2&#xff1a;结构化输出2.1.3 策略3&#xff1a;模型检测2.1.4 策略4&#xff1a;提供示例 2.2 原则二…

起振电容在无源晶振电路中的作用

无源晶振电路中不只是有一个晶体谐振器。为了满足谐振条件让晶振起振正常工作&#xff0c;通常还有两个电容器。这两个电容被称之为“匹配电容”或者“谐振电容”。一般外接的这两个电容是为了使无源晶振两端的等效电容等于或接近于其负载电容。 在无源晶振电路中&#xff0c;…