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.mzph.cn/news/745218.shtml

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

相关文章

计算机服务器中了devos勒索病毒怎么解密,devos勒索病毒解密工具流程

随着网络技术的不断发展与更新&#xff0c;越来越多的企业利用网络开展了各项工作业务&#xff0c;网络也为企业提供了极大便利&#xff0c;大大提高了办公效率。但网络是一把双刃剑&#xff0c;企业的数据安全问题一直是企业关心的主要话题&#xff0c;近日&#xff0c;云天数…

InDesign 2024:创意不熄火,设计不止步mac/win版

InDesign 2024&#xff0c;不仅仅是一个设计软件更新&#xff0c;它更是设计界的一次革命性飞跃。这款全新的设计软件将为您打开前所未有的创意大门&#xff0c;让您在设计的海洋中畅游无阻。 InDesign 2024 mac/win版获取 InDesign 2024以其卓越的性能和稳定性&#xff0c;确…

钉钉魔法盒:解锁企业数字化转型新密码

在数字化的浪潮中&#xff0c;一家公司在企业团队管理和商场综合运营中致力于实现数字化转型。于是&#xff0c;该公司在与无雀科技商讨后&#xff0c;决定引入钉钉平台&#xff0c;不仅要打造商业地产平台&#xff0c;更要优化团队管理流程&#xff0c;提升组织运营效率。 针对…

Linux中mysql的安装、远程访问、基础操作、文件导入

Linux中mysql的安装、远程访问、基础操作、文件导入 cheet card1. 安装1. 使用root账号安装mysql 2. 启动mysql并创建root、管理员两个账号3. 基础操作3.1 数据库的查看、创建、修改、删除3.2 mysql的数据类型3.3 数据表的基本操作3.4 数据表结构的修改3.5 表中数据的增、删、改…

git基础命令(一)

目录 基础概念git statusgit addgit diffgit loggit commit文件可以处于以下三种状态之一远程存储库与本地存储库参考 用于知识记录。后续有新的的内容&#xff0c;例子&#xff0c;将持续更新本文档。 基础概念 工作树&#xff1a;git add 之前&#xff0c;变动内容的文件列表…

从金蝶云星空到钉钉通过接口配置打通数据

从金蝶云星空到钉钉通过接口配置打通数据 对接系统金蝶云星空 金蝶K/3Cloud&#xff08;金蝶云星空&#xff09;是移动互联网时代的新型ERP&#xff0c;是基于WEB2.0与云技术的新时代企业管理服务平台。金蝶K/3Cloud围绕着“生态、人人、体验”&#xff0c;旨在帮助企业打造面…

想要自己制作一款游戏,需要掌握哪些基本技能?

你是否曾经沉浸在游戏的世界中&#xff0c;感受到游戏带来的无限乐趣&#xff1f;你是否曾经梦想能够亲手制作一款属于自己的游戏&#xff0c;为玩家带来独特的体验&#xff1f;然而&#xff0c;要实现自己的游戏创作梦想&#xff0c;并不是一件轻松的事情。需要掌握各种技能和…

蓝桥杯历年真题省赛java b组 2016年 第六届 剪邮票

一、题目 剪邮票 如【图1.jpg】, 有12张连在一起的12生肖的邮票。 现在你要从中剪下5张来&#xff0c;要求必须是连着的。 &#xff08;仅仅连接一个角不算相连&#xff09; 比如&#xff0c;【图2.jpg】&#xff0c;【图3.jpg】中&#xff0c;粉红色所示部分就是合格的剪取。…

机器学习 Python库 乱记录

MLFlow—模型实验和跟踪 MLflow是一个平台&#xff0c;帮助你从头到尾管理你的机器学习实验&#xff0c;确保可追溯性和可重复性。它提供了一个集中的存储库&#xff0c;用于存储你的代码、数据和模型工件&#xff0c;以及一个跟踪系统&#xff0c;记录你所有的实验&#xff0c…

CSS 03

1.选择器 1.1 结构伪类选择器 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>结…

[云原生] Prometheus自动服务发现部署

一、部署服务发现 1.1 基于文件的服务发现 基于文件的服务发现是仅仅略优于静态配置的服务发现方式&#xff0c;它不依赖于任何平台或第三方服务&#xff0c;因而也是最为简单和通用的实现方式。 Prometheus Server 会定期从文件中加载 Target 信息&#xff0c;文件可使用 YAM…

使用Lua配置NeoVim

使用Lua配置NeoVim 源码地址依次添加插件视频地址 源码地址 Github: my-neovim-lua 依次添加插件 Lazy.nvim: nvim的插件管理器catpuccin: 舒缓柔和的主题插件telescope: 负责查找、过滤、预览treesitter: 基于语法树实现语法高亮neo-tree: 文件导航栏 。。。等待解锁更多 …

Zabbix 监控 tomcat

zabbix-java-gateway服务组件 zabbix监控tomcat需要用到zabbix-java-gateway组件&#xff0c;它充当zabbix服务和java应用程序之间的网关。它允许zabbix服务器用过java网关与java应用程序进行通信&#xff0c;从而监控和收集java应用程序的性能数据。 zabbix-agent服务&#xf…

数据仓库原理(二)

目录 四、数据仓库的概念模型&#xff08;一&#xff09;多维数据模型&#xff08;二&#xff09;维度与粒度 五、数据仓库的逻辑模型&#xff08;一&#xff09;多维模型&#xff08;二&#xff09;星形模型&#xff08;三&#xff09;雪花模型 六、数据仓库的物理模型&#x…

CVPR2023 | 3D Data Augmentation for Driving Scenes on Camera

3D Data Augmentation for Driving Scenes on Camera 摄像机驾驶场景的 3D 数据增强 摘要翻译 驾驶场景极其多样和复杂&#xff0c;仅靠人力不可能收集到所有情况。虽然数据扩增是丰富训练数据的有效技术&#xff0c;但自动驾驶应用中现有的摄像头数据扩增方法仅限于二维图像…

Flutter 多语言自动化本地化生成器

Flutter 多语言自动化本地化生成器 这是一个为Flutter设计的插件&#xff0c;通过从Excel表格提取的CSV文件自动生成Dart本地化文件&#xff0c;以简化应用程序本地化的流程。这个工具通过自动化创建多语言资源文件&#xff0c;简化了开发人员和翻译人员的工作流程。 特点 默…

国外visa卡怎么办理,可充ChatGPTPLUS、Claude、Midjourney

很多小伙都在使用ChatGPT&#xff0c;但是想充值ChatGPTPLUS缺需要国外的visa卡&#xff0c;拿自己的银联卡&#xff0c;尝试了好多次还是不行&#xff0c;其实用一张国外的visa卡几分钟就可以升级好 办理国外visa卡&#xff0c;点击获取 国外的visa卡&#xff0c;具体要看你…

ArcGIS全系列实战视频教程——9个单一课程组合+系列直播回放

《ArcGIS全系列实战视频教程》是由9个单一课程组合合成。组成一条ArcGIS入门实战各项专题深入应用学习全链条&#xff0c;让你学有方向、学有目的&#xff0c;系统全面掌握ArcGIS。 ArcGIS全系列实战视频教程——9个单一课程组合https://edu.csdn.net/combo/detail/2569 《Ar…

SpringBoot之Bean扫描、Bean注册

目录 Bean扫描 Bean注册 Bean lmport 自定义注解 注册条件 Bean扫描 Bean扫描有两种方式 1、标签:<context:component-scan base-package"com.mybatis"/> 2、注解: ComponentScan(basePackages "com.mybatis") springboot启动类注解可以自…

Postman定义全局变量和环境

Postman定义全局变量和环境 一. 问题二. 配置环境解决 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 一. 问题 问题前因&#xff1a;在使用postman调用elasticsearch接口的时候&…