node.js入门—day02

news2024/9/26 1:23:30

个人名片:
😊作者简介:一名大二在校生
🤡 个人主页:坠入暮云间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> 默认值: 0o666
	flag <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.coloradmin.cn/o/1517404.html

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

相关文章

NVIDIA vGPU三种授权方式(个人玩家版)

NVIDIA vGPU三种授权方式(个人玩家版) 旧版本的License Server搭建(比较推荐)说明搭建所需文件创建一个Linux虚拟机(我创建的是Ubuntu 18.04.06)修改虚拟机的MAC地址关闭虚拟机的时间同步及修改系统时间安装java安装Apache Tomcat安装许可证服务器软件上传授权文件新版本…

HarmonyOS NEXT应用开发—翻页动效案例

介绍 翻页动效是应用开发中常见的动效场景&#xff0c;常见的有书籍翻页&#xff0c;日历翻页等。本例将介绍如何通过ArkUI提供的显示动画接口animateTo实现翻页的效果。 效果图预览 使用说明 本例通过setInterval函数每秒调用一次翻页动画&#xff0c;实现连续翻页效果。 …

【OpenCV】手写字符分割

OpenCV 是一个开源的计算机视觉&#xff08;Computer Vision&#xff09;与机器学习软件库&#xff0c;提供了多种图像处理算法与接口。在 OCR 技术中&#xff0c;字符分割用于提取图像中的文字信息&#xff0c;可以应用于车牌识别、身份证识别、文档扫描等场景。本文主要记录如…

基于单片机的家庭防盗报警系统

摘 要 随着社会的发展&#xff0c;人们生活水平的不断提高和家居用品的高档化&#xff0c;家庭安全隐患也随之增加&#xff0c;所以人们便进一步提高了对家庭的保护意识。因此&#xff0c;这就不得不促使安全防盗报警系统的普及与推广。 然而传统的防盗措施难以实现人们的需求…

Tomcat下载安装及纯手动发布一个应用

文章目录 javaWeb介绍一. 下载tomcat二、部署Web项目准备三. 验证tomcat配置是否成功四、安装包中各个文件的解释与用途五、纯手动部署web项目 javaWeb介绍 1、什么是JavaWeb&#xff1f; JavaWeb是一种使用Java语言编写的基于Web的应用程序开发技术。它是通过Java的Web开发框…

Web框架开发-Django的视图层

一、视图函数 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应。响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是任何东西都可以。无论视图本身包含什么逻辑,都要返回响应。代码写在哪里也无所谓…

某狗网翻译接口逆向之webpack扣取

​​​​​逆向网址 aHR0cHM6Ly9mYW55aS5zb2dvdS5jb20 逆向链接 aHR0cHM6Ly9mYW55aS5zb2dvdS5jb20vdGV4dA 逆向接口 aHR0cHM6Ly9mYW55aS5zb2dvdS5jb20vYXBpL3RyYW5zcGMvdGV4dC9yZXN1bHQ 逆向过程 请求方式&#xff1a;POST 参数构成&#xff1a; 【s】 1b921dbefaa8d939afca…

网络编程套接字(4)——Java套接字(TCP协议)

目录 一、Java流套接字通信模型 二、TCP流套接字编程 1、ServerSocket ServerSocket构造方法&#xff1a; ServerSocket方法: 2、Socket Socket构造方法&#xff1a; Socket方法&#xff1a; 三、代码示例&#xff1a;回显服务器 1、服务器代码 代码解析 2、客户端…

谁将主导未来AI市场?Claude3、Gemini、Sora与GPT-4的技术比拼

【最新增加Claude3、Gemini、Sora、GPTs讲解及AI领域中的集中大模型的最新技术】 2023年随着OpenAI开发者大会的召开&#xff0c;最重磅更新当属GPTs&#xff0c;多模态API&#xff0c;未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义&#xff0c;不亚…

基于word2vec 和 fast-pytorch-kmeans 的文本聚类实现,利用GPU加速提高聚类速度

文章目录 简介GPU加速 代码实现kmeans聚类结果kmeans 绘图函数相关资料参考 简介 本文使用text2vec模型&#xff0c;把文本转成向量。使用text2vec提供的训练好的模型权重进行文本编码&#xff0c;不重新训练word2vec模型。 直接用训练好的模型权重&#xff0c;方便又快捷 完整…

软件无线电系列——模拟无线电、数字无线电、软件无线电

本节目录 一、模拟无线电 二、数字无线电 1、窄带数字无线电 2、宽带数字无线电 三、软件无线电本节内容 一、模拟无线电 20世纪80年代的模拟体制(美国的AMPS/欧洲的TACS)被称为第一代移动通信&#xff0c;简称1G,主要目标是为在大范围内有限的用户提供移动电话服务。最主要的…

uniapp遇到的问题

【uniapp】小程序中input输入框的placeholder-class不生效解决办法 解决&#xff1a;写在scope外面 uniapp设置底部导航 引用&#xff1a;https://www.jianshu.com/p/738dd51a0162 【微信小程序】moveable-view / moveable-area的使用 https://blog.csdn.net/qq_36901092/…

Figure与OpenAI 联手推出新机器人;荣耀首款「AI PC」即将发布

▶ Figure 与 OpenAI 联手推出新机器人 AI 机器人公司 Figure 发布了他们与 OpenAI 的合作成果&#xff0c;将 OpenAI 的大模型运用在其机器人 Figure 01 上。 据介绍&#xff0c;OpenAI 大模型加持的 Figure 01 机器人现在可以与人全面对话。 OpenAI 模型为机器人提供了高级…

微信小程序(五十九)使用鉴权组件时原页面js自动加载解决方法(24/3/14)

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.使用覆盖函数的方法阻止原页面的自动执行方法 2.使用判断实现只有当未登录时才进行方法覆盖 源码&#xff1a; app.json {"pages": ["pages/index/index","pages/logs/logs"],…

mac删除带锁标识的app

一 、我们这里要删除FortiClient.app 带锁 常规方式删除不掉带锁的 app【如下图】 二、删除命令&#xff0c;依次执行即可。 /bin/ls -dleO /Applications/FortiClient.app sudo /usr/bin/chflags -R noschg /Applications/FortiClient.app /bin/ls -dleO /Applications/Forti…

2024计算机二级3

1. 2. 3. 4. 5. 6. append每次只能添加一个元素&#xff0c;两个元素都在同一个列表内相当于是一个整体 7. d.get后边括号内会存在一个默认值&#xff0c;如果题目给出的选项内没有已经存在的键值名&#xff0c;则会返回后边的默认值 8. 字典是映射数据类型&#xff0c;不属于…

【QT】TCP简易聊天框

我们首先复习一下TCP通信的流程 基于linuxTCP客户端和服务器 QT下的TCP处理流程 服务器先启动&#xff08;处于监听状态&#xff09; 各函数的意义和使用 QTcpServer Class *QTcpServer*类提供了一个基于TCP的服务器。这个类可以接受传入的TCP连接。您可以指定端口或让QTcpS…

碳储量监测的新技术:遥感在草原碳汇评估中的潜力

在全球环境问题日益严重的今天&#xff0c;以全球变暖为主要特征的气候变化成为了人类面临的巨大挑战。它威胁着地球的生态平衡&#xff0c;对全球可持续发展构成了严峻的挑战。为了应对这一挑战&#xff0c;各国纷纷采取行动&#xff0c;致力于实现碳达峰和碳中和的目标。 在…

Zabbix 监控 tomcat

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

gradio部署视频输入输出示例,gradio网页输出视频nan,输出视频无法播放解决方法

gradio部署视频输入输出示例&#xff0c;gradio网页输出视频nan&#xff0c;输出视频无法播放 Opencv不能采用h64格式进行编码解决方案moviepy介绍浏览器接受的视频编码格式&#xff1a;采用h264编码合成视频&#xff1a; gradio部署视频输入输出示例Gradio视频组件使用详解简介…