Node.js模块分类中核心模块,常用具体代码示例

发布时间:2024年01月05日

目录

首先? ?什么是Node.js

模块分类

核心模块

常用模块示例

fs?模块

读取文件

写入文件

其他操作

http 模块

?创建 HTTP 服务器

发起 HTTP 请求

path?模块

常用方法

os?模块

常用方法和属性

util?模块

常用方法和函数


首先? ?什么是Node.js

Node.js 是一个基于 Chrome V8 JavaScript 引擎构建的开源、跨平台的 JavaScript 运行时环境。它允许开发者使用 JavaScript 在服务器端构建高性能的网络应用程序。

Node.js 提供了一组强大的特性和功能,使得开发者能够轻松地构建可扩展的网络服务器和后端应用程序。它采用了事件驱动、非阻塞 I/O 模型,使得可以在单个线程中处理大量并发连接,从而实现高效的异步编程。

Node.js 基于事件驱动的架构,通过回调函数和事件监听器来管理异步操作。这种异步编程模型使得可以不阻塞地处理多个并发请求,而不需要为每个请求创建一个新的线程。这使得 Node.js 能够处理高并发的网络应用程序,并具备良好的可伸缩性和性能。

除了作为服务器端运行时环境,Node.js 还可以用于构建命令行工具、桌面应用程序等各种类型的应用。它具有丰富的生态系统,拥有大量的第三方库和模块,可以轻松扩展功能和开发各种类型的应用。

总结起来,Node.js 是一个基于 JavaScript 的服务器端运行时环境,它提供了高性能、可伸缩和事件驱动的编程模型,使得开发者可以构建高效的网络应用程序。

模块分类

在 Node.js 中模块可以分为 3 类:核心模块第三方模块自定义模块

这篇主要解释核心模块,剩下两种会在后续相继发出

核心模块

核心模块是 Node.js 内置的模块,它们提供了许多常用的功能和 API,可直接在你的应用程序中使用,无需额外安装。

以下是一些常见的核心模块以及它们的功能:

  1. fs?模块:提供文件系统操作功能,包括文件读取、写入、重命名、删除等。

  2. path?模块:用于处理文件路径,包括路径拼接、解析、规范化等。

  3. http?模块:用于创建 HTTP 服务器和客户端,进行 Web 开发。

  4. https?模块:用于创建 HTTPS 服务器和客户端,进行安全的 Web 开发。

  5. os?模块:提供与操作系统相关的功能,如获取系统信息、CPU 使用情况、内存使用情况等。

  6. util?模块:提供一些实用工具函数,如继承、类型判断、错误处理等。

  7. events?模块:用于实现事件驱动的编程,包括创建事件监听器、触发事件等。

  8. stream?模块:用于处理流数据,包括读取、写入、转换等。

  9. crypto?模块:提供加密和解密功能,包括哈希算法、加密算法等。

  10. querystring?模块:用于解析和序列化 URL 查询字符串。

  11. url?模块:用于解析 URL 地址。

  12. zlib?模块:提供压缩和解压缩功能,支持多种压缩算法。

  13. child_process?模块:用于创建子进程,执行外部命令。

  14. dns?模块:用于进行 DNS 查询,解析域名。

  15. net?模块:用于创建网络服务器和客户端。

要在你的应用程序中使用核心模块,你只需要使用 require?函数导入模块,并调用相应的函数和方法即可。

具体

常用模块示例

fs?模块

要使用?fs?模块,首先需要使用?require?函数导入该模块:

const fs = require('fs');
读取文件

要读取文件的内容,可以使用?fs.readFile?方法。它接受文件路径和一个可选的编码参数,然后通过回调函数返回文件的内容。

以下是一个简单的例子:

const fs = require('fs');

fs.readFile('file.txt', 'utf8', (err, data) => {
  if (err) {
    console.error(err);
    return;
  }
  console.log(data);
});

?上面的例子读取了名为?file.txt?的文件的内容,并将其输出到控制台。如果读取文件时发生错误,错误信息会在回调函数中作为第一个参数传递。

写入文件

要写入数据到文件中,可以使用?fs.writeFile?方法。它接受文件路径、要写入的数据和一个可选的编码参数。写入文件时,如果文件已存在,原有内容会被覆盖。

以下是一个简单的例子:

const fs = require('fs');

const data = 'Hello, World!';

fs.writeFile('file.txt', data, 'utf8', (err) => {
  if (err) {
    console.error(err);
    return;
  }
  console.log('Data written to file.txt');
});

上面的例子将字符串?'Hello, World!'?写入到名为?file.txt?的文件中。如果写入文件时发生错误,错误信息会在回调函数中作为第一个参数传递。

其他操作

除了读取和写入文件,fs?模块还提供了很多其他的文件系统操作方法,如重命名文件、删除文件、创建文件夹、遍历目录等等。以下是一些常用的方法:

  • fs.rename(oldPath, newPath, callback):重命名文件或文件夹。

  • fs.unlink(path, callback):删除文件。

  • fs.mkdir(path, options, callback):创建文件夹。

  • fs.readdir(path, callback):读取文件夹内容。

这只是一小部分?fs?模块提供的功能,实际上还有很多其他的方法可供使用。你可以参考 Node.js 官方文档以获取更多详细信息。

总结来说,fs?模块提供了对文件系统进行操作的功能,可以方便地读取、写入、修改和删除文件,以及进行其他与文件系统相关的操作。

http 模块

要使用 `http` 模块,首先需要使用 `require` 函数导入该模块:

const http = require('http');
?创建 HTTP 服务器

要创建一个 HTTP 服务器,可以使用 `http.createServer` 方法。该方法接受一个回调函数作为参数,这个回调函数会在每次收到 HTTP 请求时被调用,并传递一个 `request` 对象和一个 `response` 对象。

以下是一个简单的例子:

const http = require('http');

const server = http.createServer((request, response) => {
  response.statusCode = 200;
  response.setHeader('Content-Type', 'text/plain');
  response.end('Hello, World!\n');
});

server.listen(3000, '127.0.0.1', () => {
  console.log('Server is running at http://127.0.0.1:3000/');
});

上面的例子创建了一个简单的 HTTP 服务器,监听在本地的 3000 端口。当有新的请求到达时,回调函数会被调用,并向客户端发送一个带有 "Hello, World!" 文本的响应。

发起 HTTP 请求

除了创建服务器,`http` 模块也可以用于创建 HTTP 客户端,并发送 HTTP 请求。

可以使用 `http.request` 方法来发起一个 HTTP 请求。该方法接受一个 URL 和一些可选的请求选项,并返回一个 `ClientRequest` 实例。

以下是一个简单的例子:

const http = require('http');

const options = {
  hostname: 'example.com',
  path: '/',
  method: 'GET'
};

const req = http.request(options, (res) => {
  console.log(`HTTP Response status code: ${res.statusCode}`);
  res.on('data', (chunk) => {
    console.log(`Received data: ${chunk}`);
  });
});

req.on('error', (error) => {
  console.error(`An error occurred: ${error}`);
});

req.end();

上面的例子发起了一个 GET 请求到 `example.com` 的根路径。当服务器返回响应时,回调函数会被调用,并将响应数据输出到控制台。

`http` 模块还提供了其他一些方法和属性,如 `http.get` 方法用于发送 GET 请求、`ClientRequest` 类代表一个正在进行的请求、`http.STATUS_CODES` 对象包含了常见的 HTTP 状态码等等。可以参考 Node.js 官方文档以获取更多信息。

总体而言,`http` 模块使得在 Node.js 应用程序中处理 HTTP 请求和响应变得非常简单和灵活,可用于构建各种类型的 Web 服务器和客户端应用程序。

path?模块

要使用?path?模块,首先需要使用?require?函数导入该模块:

const path = require('path');
常用方法

path?模块提供了一系列常用的方法,下面介绍几个常用的方法:

  • path.join([...paths]):拼接多个路径片段,并返回拼接后的路径。这个方法会根据操作系统的特性自动选择正确的路径分隔符。

    const path = require('path');
    
    const fullPath = path.join('/home', 'user', 'documents', 'file.txt');
    console.log(fullPath);
    // 输出: /home/user/documents/file.txt
    
  • path.resolve([...paths]):将路径片段解析为绝对路径,并返回解析后的路径。如果路径是绝对路径,则直接返回。

    const path = require('path');
    
    const absolutePath = path.resolve('documents', 'file.txt');
    console.log(absolutePath);
    // 输出: /current/working/directory/documents/file.txt
    
  • path.basename(path, [ext]):返回路径的最后一部分(文件名),可以选择性地指定文件扩展名?ext,以去除扩展名。

    const path = require('path');
    
    const fileName = path.basename('/home/user/documents/file.txt');
    console.log(fileName);
    // 输出: file.txt
    
    const fileNameWithoutExt = path.basename('/home/user/documents/file.txt', '.txt');
    console.log(fileNameWithoutExt);
    // 输出: file
    
  • path.dirname(path):返回路径所在的目录名。

    const path = require('path');
    
    const directory = path.dirname('/home/user/documents/file.txt');
    console.log(directory);
    // 输出: /home/user/documents
    
  • path.extname(path):返回路径的扩展名。

    const path = require('path');
    
    const ext = path.extname('/home/user/documents/file.txt');
    console.log(ext);
    // 输出: .txt
    

这只是?path?模块提供的一些常用方法,实际上还有很多其他的方法可供使用。你可以参考 Node.js 官方文档以获取更多详细信息。

总结来说,path?模块提供了一组方法,用于处理文件路径和目录路径。它可以方便地拼接路径、解析路径、获取文件名、目录名和扩展名等信息。

os?模块

要使用?os?模块,首先需要使用?require?函数导入该模块:

const os = require('os');
常用方法和属性

os?模块提供了一些常用的方法和属性,下面介绍几个常用的:

  • os.platform():返回当前操作系统的平台标识符。可能的值有:

    • 'darwin':Mac OS X
    • 'win32':Windows
    • 'linux':Linux
    • 'aix':IBM AIX
    • 'freebsd':FreeBSD
    • 'openbsd':OpenBSD
    • 'sunos':SunOS
    const os = require('os');
    
    const platform = os.platform();
    console.log(platform);
    // 输出: darwin (如果当前操作系统是 Mac OS X)
    
  • os.arch():返回当前操作系统的处理器架构。可能的值有:

    • 'x64':64 位操作系统
    • 'arm':ARM 架构(如树莓派)
    • 'ia32':32 位操作系统
    const os = require('os');
    
    const arch = os.arch();
    console.log(arch);
    // 输出: x64 (如果当前操作系统是 64 位)
    
  • os.cpus():返回一个对象数组,包含当前计算机的所有 CPU/处理器的信息。

    const os = require('os');
    
    const cpus = os.cpus();
    console.log(cpus);
    // 输出每个 CPU 的详细信息
    
  • os.totalmem():返回计算机的总内存(以字节为单位)。

    const os = require('os');
    
    const totalMemory = os.totalmem();
    console.log(totalMemory);
    // 输出计算机的总内存大小(以字节为单位)
    
  • os.freemem():返回计算机的可用内存(以字节为单位)。

    const os = require('os');
    
    const freeMemory = os.freemem();
    console.log(freeMemory);
    // 输出计算机的可用内存大小(以字节为单位)
    

这只是?os?模块提供的一些常用方法和属性,实际上还有很多其他的方法和属性可供使用。你可以参考 Node.js 官方文档以获取更多详细信息。

总结来说,os?模块提供了一组方法和属性,用于获取操作系统的信息,如平台、处理器架构、CPU 信息以及内存信息等。

util?模块

要使用?util?模块,首先需要使用?require?函数导入该模块:

const util = require('util');
常用方法和函数

util?模块提供了许多常用的方法和函数,下面介绍几个常用的:

  • util.promisify(original):将一个基于回调的异步函数转换为基于 Promise 的异步函数。

    const util = require('util');
    const fs = require('fs');
    
    const readFile = util.promisify(fs.readFile);
    
    // 读取文件并返回一个 Promise 对象
    readFile('file.txt', 'utf8')
      .then(data => console.log(data))
      .catch(error => console.error(error));
    
  • util.format(format[, ...args]):格式化字符串,类似于?console.log()?中的使用方法。

    const util = require('util');
    
    const name = 'John';
    const age = 30;
    const message = util.format('My name is %s and I am %d years old.', name, age);
    
    console.log(message);
    // 输出: My name is John and I am 30 years old.
    
  • util.inherits(constructor, superConstructor):继承。

    const util = require('util');
    const EventEmitter = require('events');
    
    // 自定义构造函数
    function MyEmitter() {
      EventEmitter.call(this);
    }
    
    // 继承 EventEmitter
    util.inherits(MyEmitter, EventEmitter);
    
  • util.inspect(object[, options]):将对象转换为字符串的形式,可用于调试和日志记录。

    const util = require('util');
    
    const obj = { name: 'John', age: 30 };
    
    console.log(util.inspect(obj));
    // 输出: { name: 'John', age: 30 }
    
  • util.isArray(object):判断给定的对象是否为数组。

    const util = require('util');
    
    console.log(util.isArray([]));
    // 输出: true
    
    console.log(util.isArray({}));
    // 输出: false
    

这只是?util?模块提供的一些常用方法和函数,实际上还有很多其他的方法和函数可供使用。你可以参考 Node.js 官方文档以获取更多详细信息。

总结来说,util?模块提供了一组实用工具函数,用于简化常见的 JavaScript 编程任务,如格式化字符串、继承、转换对象为字符串等。

通过使用核心模块,你可以方便地实现各种功能并与外部资源进行交互,从而构建出强大的 Node.js 应用程序。

其他类型分类模块

除了按来源分为核心模块、第三方模块和自定义模块外,还可以按模块的功能划分为以下 3 种类型:

?单例模块:单例模块是一种只导出一个对象或函数的模块,每次导入该模块时都会返回同一个实例。这些模块一般用于封装状态和行为,以及共享实例。例如,Node.js 中的 `fs` 模块和 `path` 模块都是单例模块。

工厂模块:工厂模块是一种根据参数或配置项创建新实例的模块,每次导入该模块时都会返回一个新的实例。这些模块一般用于封装复杂的逻辑和处理可重用组件。例如,第三方模块中的 _Lodash_ 就是一个工厂模块,它提供了各种常用函数的实现,并且每次调用函数都会返回一个新的实例。

命名空间模块:命名空间模块是一种将多个相关函数、类或对象组织到一个导出对象中的模块。这些模块一般用于封装相关组件和提供模块级别的 API。例如,一个自定义模块可以导出一个包含多个相关函数的对象,如:

// utils.js
module.exports.string = {
  trim: function(str) { return str.trim(); },
  capitalize: function(str) { return str[0].toUpperCase() + str.slice(1); }
}

module.exports.array = {
  sortBy: function(arr, key) { return arr.sort((a, b) => a[key] - b[key]); },
  filter: function(arr, callback) { return arr.filter(callback); }
}

其他模块可以使用该自定义模块并按名称访问组件:

const utils = require('./utils');

console.log(utils.string.trim('  hello  '));         // 输出: "hello"
console.log(utils.array.sortBy([{ id: 2 }, { id: 1 }], 'id'));   // 输出: [{ id: 1 }, { id: 2 }]

以上 3 种模块类型并不是严格的分类,实际上不同类型的模块可以混合使用,例如一个单例模块中可以包含多个命名空间模块。选择使用哪种模块类型取决于你要解决的问题和设计的需要。

文章来源:https://blog.csdn.net/kkkys_kkk/article/details/135409851
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。