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> 默认值: 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]); //返回关于当前有效用户的信息

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

尚硅谷SpringBoot3笔记 (二) Web开发

Servlet&#xff0c;SpringMVC视频推荐&#xff1a;53_尚硅谷_servlet3.0-简介&测试_哔哩哔哩_bilibili HttpServlet 是Java Servlet API 的一个抽象类&#xff0c;用于处理来自客户端的HTTP请求并生成HTTP响应。开发人员可以通过继承HttpServlet类并重写其中的doGet()、do…

自然语言处理NLP:tf-idf原理、参数及实战

大家好&#xff0c;tf-idf作为文体特征提取的常用统计方法之一&#xff0c;适合用于文本分类任务&#xff0c;本文将从原理、参数详解和实际处理方面介绍tf-idf&#xff0c;助力tf-idf用于文本数据分类。 1.tf-idf原理 tf 表示词频&#xff0c;即某单词在某文本中的出现次数与…

蓝牙耳机链接电脑莫名奇妙关机问题(QQ浏览器)

蓝牙耳机连接电脑听歌的时候&#xff0c;如果听歌软件是暴风影音&#xff0c;或者其它播放器&#xff0c;蓝牙不会自动关机&#xff0c;但如果是QQ浏览器&#xff0c;蓝牙耳机经常莫名其妙的关机&#xff0c;时间间隔忽长忽短&#xff0c;没有规律&#xff0c;解决办法就是重启…

让el-input与其他组件能够显示在同一行

让el-input与其他组件能够显示在同一行 说明&#xff1a;由于el-input标签使用会默认占满一行&#xff0c;所以在某些需要多个展示一行的时候不适用&#xff0c;因此需要能够跟其他组件显示在同一行。 效果&#xff1a; 1、el-input标签内使用css属性inline 111<el-inp…

基于单片机的车载酒精含量自检系统设计与实现

摘要:调查显示,大约50%的交通事故与酒后驾车有关,酒后驾车已成为车祸致死的首要原因。为从根本上杜绝酒后驾车,设计了一款基于STC89C52 单片机的车载酒精含量自检系统,该系统能很好地解决酒驾问题,控制简单、使用方便,具有很好的应用价值。 关键词:STC89C52 单片机;车…

jenkins+maven+gitlab自动化构建打包、部署

Jenkins自动化部署实现原理 环境准备 1、jenkins已经安装好 docker安装jenkins 2、gitlab已经安装好 docker安装gitlab 一、Jenkins系统配置 1.Global Tool Configuration 任务构建所用到的编译环境等配置&#xff0c;配置参考&#xff1a; jdk配置&#xff08;jenkins自带…

hadoop伪分布式环境搭建详解

&#xff08;操作系统是centos7&#xff09; 1.更改主机名&#xff0c;设置与ip 的映射关系 hostname //查看主机名 vim /etc/hostname //将里面的主机名更改为master vim /etc/hosts //将127.0.0.1后面的主机名更改为master&#xff0c;在后面加入一行IP地址与主机名之间的…

PostgreSQL开发与实战(6.3)体系结构3

作者&#xff1a;太阳 四、物理结构 4.1 软件安装目录 bin //二进制可执行文件 include //头文件目录 lib //动态库文件 share //文档以及配置模版文件4.2 数据目录 4.2.1 参数文件 pg_hba.conf //认证配置文件 p…

给电脑加硬件的办法 先找电脑支持的接口,再买相同接口的

需求&#xff1a;我硬盘太小&#xff0c;换或加一个大硬盘 结论&#xff1a;接口是NVMe PCIe 3.0 x4 1.找到硬盘型号 主硬盘 三星 MZALQ512HALU-000L2 (512 GB / 固态硬盘) 2.上官网查 或用bing查 非官方渠道信息&#xff0c;不确定。

HTTP代理的特性、功能作用是什么样的?

在当今互联网时代&#xff0c;HTTP代理作为网络通信中的一项重要技术&#xff0c;在各行各业都有着广泛的应用。然而&#xff0c;对于许多人来说&#xff0c;HTTP代理的特性和功能作用并不十分清晰。在本文中&#xff0c;我们将深入探讨HTTP代理的各种特性和功能&#xff0c;帮…

报表生成器FastReport .Net用户指南:关于脚本(上)

FastReport的报表生成器&#xff08;无论VCL平台还是.NET平台&#xff09;&#xff0c;跨平台的多语言脚本引擎FastScript&#xff0c;桌面OLAP FastCube&#xff0c;如今都被世界各地的开发者所认可&#xff0c;这些名字被等价于“速度”、“可靠”和“品质”,在美国&#xff…

探索编程新纪元:Code GeeX、Copilot与通义灵码的智能辅助之旅

在人工智能技术日新月异的今天&#xff0c;编程领域的革新也正以前所未有的速度推进。新一代的编程辅助工具&#xff0c;如Code GeeX、Copilot和通义灵码&#xff0c;正在重塑开发者的工作流程&#xff0c;提升编程效率&#xff0c;并推动编程教育的普及。本文将深入探讨这三款…

如何在Windows 10上打开和关闭平板模式?这里提供详细步骤

前言 默认情况下&#xff0c;当你将可翻转PC重新配置为平板模式时&#xff0c;Windows 10会自动切换到平板模式。如果你希望手动打开或关闭平板模式&#xff0c;有几种方法可以实现。​ 自动平板模式在Windows 10上如何工作 如果你使用的是二合一可翻转笔记本电脑&#xff0…

《小程序从入门到入坑》框架语法

前言 哈喽大家好&#xff0c;我是 SuperYing&#xff0c;我们继续小程序入门系列&#xff0c;本文将对小程序框架语法进行比较全面的介绍。在《小程序从入门到入坑》简介及工程创建中&#xff0c;我们提到小程序项目结构&#xff0c;主要包括 app.json&#xff0c;app.js&…

某夕夕商品数据抓取逆向之webpack扣取

逆向网址 aHR0cHM6Ly93d3cucGluZHVvZHVvLmNvbQ 逆向链接 aHR0cHM6Ly93d3cucGluZHVvZHVvLmNvbS9ob21lL2JveXNoaXJ0 逆向接口 aHR0cHM6Ly9hcGl2Mi5waW5kdW9kdW8uY29tL2FwaS9naW5kZXgvdGYvcXVlcnlfdGZfZ29vZHNfaW5mbw 逆向过程 请求方式&#xff1a;GET 参数构成 【anti_content】…

爬虫入门到精通_实战篇12(使用Redis+Flask维护动态Cookies池)

1 目标 为什么要用Cookies池 网站需要登录才可爬取&#xff0c;例如新浪微博爬取过程中如果频率过高会导致封号需要维护多个账号的Cookies池实现大规模爬取 Cookies池的要求 自动登录更新定时验证筛选提供外部接口 2 流程框架 首先&#xff0c;需要有一个账号队列&#xf…

【Node.js从基础到高级运用】十一、构建RESTful API

在本篇博客中&#xff0c;我们将综合之前讨论的内容&#xff0c;深入探索如何使用Node.js构建一个RESTful API。我们将重点讨论设计合理的API端点&#xff0c;展示如何通过代码实现这些端点&#xff0c;并指导如何使用Postman测试我们的API&#xff0c;确保其按预期工作。 前提…

Spring Cloud Alibaba微服务从入门到进阶(四)(服务发现-Nacos )

Nacos是服务发现组件和配置服务器 作为服务发现注册组件Nacos Server 搭建Nacos Server 下载、启动 访问nacos,默认 用户/密码 nacos/nacos 将应用注册到nacos 加依赖 在SpringCloud子项目中&#xff0c;Feign是属于OpenFeign&#xff0c;Sentinel、Nacos是属于alibaba的&…

RabbitMQ 模拟实现【六】:程序模拟实现

文章目录 模拟实现模拟消费者模拟生产者效果展示 启动结果如下&#xff1a; ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/71841546ad8043f1bd51e4408df791de.png)![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/f6e3e72ff9a4483c978ec48e24f075c2.p…

阿里云-云服务器ECS新手如何建网站?

租阿里云服务器一年要多少钱&#xff1f; 不同类型的服务器有不同的价格。 以ECS计算型c5为例&#xff1a;2核4G-1年518.40元&#xff0c;4核8G-1年948.00元。 阿里云ECS云服务器租赁价格由三部分组成&#xff1a; 也就是说&#xff0c;云服务器配置成本磁盘价格网络宽带价格…