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

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 超级实用!详解Node.js中的path模块和events模块

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 类来创建自定义的事件对象,并在其中添加自定义的属性和方法。

相关文章
|
2月前
|
缓存 JavaScript 安全
nodejs里面的http模块介绍和使用
综上所述,Node.js的http模块是构建Web服务的基础,其灵活性和强大功能,结合Node.js异步非阻塞的特点,为现代Web应用开发提供了坚实的基础。
122 62
|
3月前
|
JavaScript 前端开发
Vue、ElementUI配合Node、multiparty模块实现图片上传并反显_小demo
如何使用Vue和Element UI配合Node.js及multiparty模块实现图片上传并反显的功能,包括前端的Element UI组件配置和后端的Node.js服务端代码实现。
54 1
Vue、ElementUI配合Node、multiparty模块实现图片上传并反显_小demo
|
2月前
|
缓存 JSON JavaScript
Node.js模块系统
10月更文挑战第4天
44 2
|
2月前
|
JavaScript 应用服务中间件 Apache
Node.js Web 模块
10月更文挑战第7天
33 0
|
2月前
|
JavaScript 网络协议
Node.js 工具模块
10月更文挑战第7天
21 0
|
2月前
|
JavaScript 前端开发 应用服务中间件
Node.js Web 模块
Node.js Web 模块
|
Web App开发 JavaScript Unix
|
1月前
|
Web App开发 JavaScript 前端开发
2024年5月node.js安装(winmac系统)保姆级教程
本篇博客为2024年5月版Node.js安装教程,适用于Windows和Mac系统。作者是一名熟悉JavaScript与Vue的大一学生,分享了Node.js的基本介绍、下载链接及简单安装步骤。安装完成后,通过终端命令`node -v`验证版本即可确认安装成功。欢迎关注作者,获取更多技术文章。
28 2
2024年5月node.js安装(winmac系统)保姆级教程
|
29天前
|
存储 JavaScript 搜索推荐
Node框架的安装和配置方法
安装 Node 框架是进行 Node 开发的第一步,通过正确的安装和配置,可以为后续的开发工作提供良好的基础。在安装过程中,需要仔细阅读相关文档和提示,遇到问题及时解决,以确保安装顺利完成。
83 2
|
3月前
|
JavaScript
NodeJs的安装
文章介绍了Node.js的安装步骤和如何创建第一个Node.js应用。包括从官网下载安装包、安装过程、验证安装是否成功,以及使用Node.js监听端口构建简单服务器的示例代码。
NodeJs的安装
下一篇
DataWorks