超级实用!详解Node.js中的path模块和events模块

news2024/10/6 23:21:29

在这里插入图片描述

文章目录

  • 3. `path` 模块
    • 路径操作方法
    • 路径格式化方法
    • 路径拆分方法
  • 4. `events` 模块
    • EventEmitter 类
      • 创建事件对象
      • 注册事件处理函数
      • 触发事件
      • 一次性事件处理函数
      • 异步事件处理函数
      • 移除事件处理函数
    • 继承 EventEmitter 类

3. path 模块

用于处理文件路径,包括解析、拼接、规范化路径等操作。

const path = require('path');

path 模块是 Node.js 中的核心模块之一,用于处理文件路径和目录路径。通过 path 模块,我们可以方便地操作和转换不同平台上的文件路径。

路径操作方法

以下是 path 模块中常用的路径操作方法:

  • path.join([...paths]):将多个路径片段连接起来,并返回新的路径字符串。例如:path.join('/foo', 'bar', 'baz/asdf', 'quux', '..') 输出为 /foo/bar/baz/asdf
  • path.resolve([...paths]):将一个或多个路径解析为绝对路径,并返回新的路径字符串。相当于执行多次 cd 命令后再执行 pwd 命令得到的路径。例如:path.resolve('/foo/bar', './baz') 输出为 /foo/bar/baz
  • path.dirname(path):返回路径的目录名。例如:path.dirname('/foo/bar/baz/asdf/quux.txt') 输出为 /foo/bar/baz/asdf
  • path.basename(path[, ext]):返回路径的文件名。如果指定了第二个参数 ext,则移除文件名的扩展名。例如:path.basename('/foo/bar/baz/asdf/quux.txt') 输出为 quux.txt
  • path.extname(path):返回路径的扩展名。例如:path.extname('index.html') 输出为 .html

路径格式化方法

以下是 path 模块中常用的路径格式化方法:

  • path.normalize(path):规范化路径,解析 ... 等符号,并返回新的路径字符串。例如:path.normalize('/foo/bar//baz/asdf/quux/..') 输出为 /foo/bar/baz/asdf
  • path.isAbsolute(path):判断路径是否为绝对路径,返回布尔值。例如:path.isAbsolute('/foo/bar') 输出为 true
  • path.relative(from, to):根据当前工作目录,将路径 from 转换为相对于路径 to 的相对路径,并返回新的路径字符串。例如:path.relative('/data/orandea/test/aaa', '/data/orandea/impl/bbb') 输出为 ../../impl/bbb

路径拆分方法

以下是 path 模块中常用的路径拆分方法:

  • path.parse(path):由文件路径返回一个对象,包含路径的各个组成部分,如 dir(路径)、base(文件名+扩展名)、name(文件名)和 ext(扩展名)。例如:path.parse('/foo/bar/baz/asdf/quux.txt') 返回 { root: '/', dir: '/foo/bar/baz/asdf', base: 'quux.txt', ext: '.txt', name: 'quux' }
  • path.format(pathObject):根据一个路径对象返回路径字符串。例如:path.format({ dir: '/foo/bar/baz/asdf', base: 'quux.txt' }) 输出为 /foo/bar/baz/asdf/quux.txt

总结:path 模块是 Node.js 中用于处理文件路径和目录路径的核心模块。通过 path 模块,我们可以进行路径的拼接、解析、格式化等操作。在跨平台开发时,使用 path 模块可以确保路径的正确性和一致性。

4. events 模块

提供了事件触发器和事件监听器的功能,可用于实现事件驱动的编程模式。

const EventEmitter = require('events');

events 模块是 Node.js 中的核心模块之一,用于实现事件驱动的编程。通过 events 模块,我们可以创建、触发和处理事件,从而实现模块间的解耦和异步编程。

EventEmitter 类

events 模块提供了 EventEmitter 类,它是一个基于观察者模式的事件处理器。通过继承 EventEmitter 类,我们可以创建自定义的事件对象,并在对象中注册处理事件的回调函数。

创建事件对象

可以通过以下方式创建事件对象:

const EventEmitter = require('events');

class MyEmitter extends EventEmitter {}

const myEmitter = new MyEmitter();

在上述代码中,我们首先引入 events 模块并获取 EventEmitter 类。然后,我们定义了一个自定义类 MyEmitter,该类继承自 EventEmitter。最后,我们创建了一个 myEmitter 对象,该对象就是我们自定义的事件对象。

注册事件处理函数

可以使用 on 方法为事件注册处理函数,如下所示:

myEmitter.on('event', () => {
  console.log('Event occurred');
});

在上述代码中,我们使用 on 方法为 event 事件注册了一个处理函数。当事件被触发时,该处理函数将会被执行。

触发事件

可以使用 emit 方法触发事件,并传递参数给事件处理函数,如下所示:

myEmitter.emit('event');

在上述代码中,我们使用 emit 方法触发了 event 事件。当事件被触发时,与之相关联的处理函数将会被执行。如果有参数需要传递给事件处理函数,可以在 emit 方法中指定。

一次性事件处理函数

除了 on 方法外,events 模块还提供了 once 方法,用于注册一次性的事件处理函数。例如:

myEmitter.once('event', () => {
  console.log('Event occurred only once');
});

在上述代码中,我们使用 once 方法为 event 事件注册了一个一次性的处理函数。该处理函数只会被触发一次,之后就会自动解绑。

异步事件处理函数

当事件处理函数需要进行异步操作时,可以利用回调函数或 Promises 实现异步处理。例如:

myEmitter.on('event', (arg, callback) => {
  setTimeout(() => {
    console.log(arg);
    callback();
  }, 1000);
});

myEmitter.emit('event', 'Hello, World!', () => {
  console.log('Event handling completed');
});

在上述代码中,我们的事件处理函数通过使用 setTimeout 函数模拟了一个异步操作。在异步操作完成后,调用了回调函数 callback。在触发事件时,我们还可以传递额外的参数给事件处理函数。

移除事件处理函数

可以使用 offremoveListener 方法移除事件处理函数。例如:

const callback = () => {
  console.log('Event occurred');
};

myEmitter.on('event', callback);
myEmitter.off('event', callback);

在上述代码中,我们使用 on 方法注册了一个事件处理函数,然后使用 off 方法将其移除。removeListener 方法与 off 方法作用相同,可以选择使用其中之一。

继承 EventEmitter 类

除了直接使用 EventEmitter 类创建事件对象外,还可以通过继承该类来创建自定义的事件对象。这种方式允许我们在自定义事件对象中添加额外的属性和方法。

const EventEmitter = require('events');

class MyCustomEmitter extends EventEmitter {
  constructor() {
    super();
    this.customProperty = 'Hello, World!';
  }

  customMethod() {
    console.log('Custom method invoked');
  }
}

const myCustomEmitter = new MyCustomEmitter();

myCustomEmitter.on('event', () => {
  console.log(myCustomEmitter.customProperty);
  myCustomEmitter.customMethod();
});

myCustomEmitter.emit('event');

在上述代码中,我们定义了一个自定义事件对象 MyCustomEmitter,并通过继承 EventEmitter 类来实现。在构造函数中,我们初始化了一个自定义属性 customProperty 和一个自定义方法 customMethod。然后,我们创建了一个 myCustomEmitter 对象,注册了一个事件处理函数,并触发了 event 事件。在事件处理函数中,我们可以访问自定义属性和调用自定义方法。

总结:events 模块是 Node.js 中用于实现事件驱动编程的核心模块。通过 EventEmitter 类,我们可以创建事件对象,并在对象中注册处理事件的回调函数。使用 on 方法注册事件处理函数,使用 emit 方法触发事件。此外,还可以使用 once 方法注册一次性事件处理函数,使用 offremoveListener 方法移除事件处理函数。我们还可以继承 EventEmitter 类来创建自定义的事件对象,并在其中添加自定义的属性和方法。

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

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

相关文章

删除MySQL中名字首尾固定关键字相同的表

删除MySQL中名字首尾固定关键字相同的表 SELECT CONCAT(drop table , group_concat(TABLE_NAME), ;) FROM information_schema.TABLES WHERE table_schema test AND TABLE_NAME LIKE t_%_history ;查看表列表 SHOW TABLES;通过上图观察发现所有的表都是以 t_ 开头 和以 _his…

Mybatis-Plus学习1

mybatis-plus需要两个依赖&#xff0c;一个lombok&#xff0c;一个mybatis-plus <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.1</version> </dependency> …

Service 基础

今天开始来分享Service 的基础知识&#xff0c;后续我们可以慢慢打磨&#xff0c;分享 Service 的进阶知识和原理 Service 基本概念 Service 是 K8S 最核心的概念了 我们可以通过创建 Service &#xff0c;为一组具有相同功能的容器应用提供一个统一的入口地址&#xff0c;并…

linux上搭建ftp服务

linux上搭建ftp服务简要过程。 1.安装 在目标主机上安装对应软件。 rpm -qa | grep vsftpd # 查看是否已经安装了vsftpd软件 yum install -y vsftpd # 安装2.配置 安装好了之后可在这个路径下编辑配置文件&#xff0c;按需配置&#xff0c;这里采用默认。 vi /etc/vsftp…

螺杆支撑座要怎么选?

螺杆支撑座是连接螺杆和电机的轴承固定座&#xff0c;使用螺杆支撑座可以获得高刚性、高精度的稳定的回转性能&#xff0c;这也是大部分厂商愿意使用的原因之一。 目前&#xff0c;市面上做螺杆支撑座的品牌还比较少&#xff0c;给大家选择的空间也不多&#xff0c;那么我们如何…

centos8运行cloudstack4.18

安装软件&#xff1a; mysql 5.7.42 node v10.24.0 git 2.34.1 jdk openjdk version "11.0.19" 2023-04-18 maven Apache Maven 3.8.3 (ff8e977a158738155dc465c6a97ffaf31982d739)自行配置&#xff1a;nfs 代码克隆地址&#xff1a; git clone https://git-wip-us…

Lesson1-1:OpenCV简介

图像处理 学习目标 了解图像的起源知道数字图像的表示 1 图像的起源 1.1 图像是什么 图像是人类视觉的基础&#xff0c;是自然景物的客观反映&#xff0c;是人类认识世界和人类本身的重要源泉。“图”是物体反射或透射光的分布&#xff0c;“像“是人的视觉系统所接受的图在…

ss客服让您在Facebook 的客户服务更便捷

ss客服让您在Facebook Messenger 的客户服务更便捷 在这个信息时代&#xff0c;新兴通讯软件蓬勃兴起&#xff0c;比如Facebook Messenger。事实证明&#xff0c;这对企业来说非常有利&#xff0c;同时突出了电子邮件、网络聊天和电话等传统渠道的局限性。在传统渠道上&#xf…

fastadmin表格列表内部自定义按钮

效果图&#xff1a; 直接上代码&#xff1a; 打开js渲染文件---》找到渲染原生的按钮&#xff1a; {field: "operate",title: __("Operate"),table: table,events: Table.api.events.operate,buttons: [//可多个按钮{name: "record", //名称tex…

vue + js 实现导出excel

效果如下图所示&#xff1a; 下面是具体的步骤&#xff1a; 第一步&#xff1a;安装依赖 **注意&#xff1a;**安装的时候注意版本号 npm install --save file-saver xlsx第二步&#xff1a;新建导出文件 Export2Excel.js /* eslint-disable */ import { saveAs } from f…

C#winform listBox组件批量删除

修改listBox组件属性&#xff1a;可以选中多个板坯号 选中板坯列表&#xff0c;在界面上点击删除按钮&#xff0c;触发删除方法deleteList&#xff1a; private void deleteList() { ListBox.SelectedIndexCollection sic listBoxProducts.SelectedIndice…

亚马逊云科技推出Amazon AppFabric,SaaS安全不断加码

亚马逊云科技近日宣布推出Amazon AppFabric来增强公司在软件即服务&#xff08;SaaS&#xff09;应用程序方面的现有投入。Amazon AppFabric是一项无代码服务&#xff0c;可以为客户提高安全性&#xff0c;管理水平和生产力。只需在亚马逊云科技管理控制台上点击几下&#xff0…

gerrit 遇到的问题汇总

更新远程代码 git pull --rebase 回退到指定版本 get reset --hard commitid 修改之前的提交 git commit --amend 问题一 本地提交了两个记录到远程&#xff0c;远程还没有合并&#xff0c;本地使用 git reset --soft HEAD~1 回退到了上一个提交&#xff0c;现在需要将本地…

最强的“矛“ 验关键的“盾“ | “铸网-2023“ 赛宁数字孪生靶场深度验证湖南工业互联网安全

为深入推动“智赋万企”数字安全屏障工程&#xff0c;由工业和信息化部网络安全管理局指导&#xff0c;湖南省工信厅和湖南省通管局主办的“铸网—2023”湖南省工业互联网企业网络安全实战攻防演练&#xff0c;于近日圆满收官。赛宁网安以数字孪生靶场为基础&#xff0c;构建专…

学习Vue3——Ref全家桶

参考地址 小满Vue3视频 ref 创造响应式对象 这样修改num的值是可以&#xff0c;但是页面展示不正常&#xff0c;因为这不是响应式的&#xff0c;无法被vue追踪 <template><div>{{ num }}</div><button click"change">修改</button&g…

企业电子招投标采购系统源码之-java spring cloud

​ 信息数智化招采系统 服务框架&#xff1a;Spring Cloud、Spring Boot2、Mybatis、OAuth2、Security 前端架构&#xff1a;VUE、Uniapp、Layui、Bootstrap、H5、CSS3 涉及技术&#xff1a;Eureka、Config、Zuul、OAuth2、Security、OSS、Turbine、Zipkin、Feign、Monitor、…

JavaSE-13 【API工具类和包装类】

文章目录 JavaSE-13 【API工具类和包装类】第一章 Object类1.1 概述1.2 toString 方法1.3 equals 方法1.4 Objects类 第二章 日期时间类2.1 Date类2.2 DateFormat类2.3 Calendar类 第三章 System类3.1 类介绍3.2 currentTimeMillis方法3.3 arraycopy方法 第四章 包装类4.1 概述…

海思3559:MMZ内存、OS内存配置

前言 海思3559的DDR最大支持到8GB hi3559av100芯片的内存地址范围 (1)通过查阅数据手册可知《Hi3559AV100 专业型 Smart IP Camera SoC 用户指南》&#xff0c;芯片的内存地址范围是0x4000_0000-0x23FFF_FFFF&#xff0c;最大能支持8G内存&#xff1b;   (2)海思芯片把内存分…

Matlab绘制多个曲线的图及局部放大细节展示

绘制多个曲线的图及局部放大细节展示 在科学研究中&#xff0c;经常需要绘制多个曲线并展示局部放大的细节(如下图)。 本篇博客介绍了如何使用MATLAB绘制多个曲线&#xff0c;并在同一张图中添加局部放大图&#xff0c;以展示具体细节。 示例数据 首先&#xff0c;我们准备…

六、2.云尚办公-权限管理

云尚办公系统&#xff1a;前端权限对接&#xff08;了解&#xff09; B站直达【为尚硅谷点赞】: https://www.bilibili.com/video/BV1Ya411S7aT 本博文以课程相关为主发布&#xff0c;并且融入了自己的一些看法以及对学习过程中遇见的问题给出相关的解决方法。一起学习一起进步…