【Node.js从基础到高级运用】二十七、温故知新-Node.js 核心模块

发布于:2024-04-29 ⋅ 阅读:(26) ⋅ 点赞:(0)

Module — 模块

在 Node.js 中,每个文件都被视为一个独立的模块。Node.js 提供了一个简单的模块系统,可以使用 require 函数来加载其他模块。

// math.js
function add(a, b) {
    return a + b;
}

module.exports = { add };

// app.js
const math = require('./math');
console.log(math.add(2, 3)); // 输出:5

在上面的例子中,math.js 定义了一个加法函数,并通过 module.exports 导出。app.js 则通过 require 函数引入 math.js 模块,并使用其中的 add 函数。

HTTP / HTTPS / HTTP2

Node.js 提供了 httphttpshttp2 模块,用于创建 HTTP/HTTPS 服务器和客户端。

// HTTP 服务器示例
const http = require('http');

const server = http.createServer((req, res) => {
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end('Hello World\n');
});

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

在这个例子中,我们创建了一个 HTTP 服务器,它监听本地的 3000 端口,并对所有请求返回 “Hello World”。

Net — 网络

net 模块提供了创建基于流的 TCP 或 IPC 的服务器 (net.createServer()) 和客户端 (net.createConnection()) 的异步网络 API。

// TCP 服务器示例
const net = require('net');

const server = net.createServer((socket) => {
    socket.end('Goodbye\n');
}).on('error', (err) => {
    // 处理错误
    throw err;
});

server.listen(() => {
    console.log('Opened server on', server.address());
});

这段代码创建了一个 TCP 服务器,它在接收到连接时发送 “Goodbye” 并关闭连接。

Event — 事件

Node.js 的 events 模块允许创建、触发和监听自定义事件。这是 Node.js 提供的事件驱动架构的基础。

// 事件示例
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}

const myEmitter = new MyEmitter();
myEmitter.on('event', () => {
    console.log('An event occurred!');
});
myEmitter.emit('event');

在这个例子中,我们创建了一个 MyEmitter 类,它继承自 EventEmitter。我们监听了一个名为 ‘event’ 的事件,并在触发该事件时打印一条消息。

Stream — 流

stream 模块用于处理流数据。Node.js 中有四种基本的流类型:ReadableWritableDuplexTransform

// 流示例
const fs = require('fs');
const stream = require('stream');

const readableStream = fs.createReadStream('file.txt');
const writableStream = fs.createWriteStream('file_copy.txt');

readableStream.pipe(writableStream);

这段代码创建了一个可读流和一个可写流,然后使用 .pipe() 方法将可读流中的数据写入可写流,实现文件的复制。

Buffer — 缓冲区

在 Node.js 中,Buffer 类用于操作二进制数据。它可以在 TCP 流或文件系统操作中使用。

// Buffer 示例
const buf = Buffer.from('Hello', 'utf8');

console.log(buf.toString('hex')); // 输出:68656c6c6f
console.log(buf.toString('base64')); // 输出:SGVsbG8=

在这个例子中,我们创建了一个包含 “Hello” 的 Buffer,然后将其转换为十六进制和 Base64 编码的字符串。

Crypto — 加密

crypto 模块提供了加密功能,包括对密码学散列函数、HMAC、加密、解密、签名和验证的支持。

// 加密示例
const crypto = require('crypto');

const secret = 'abcdefg';
const hash = crypto.createHmac('sha256', secret)
                   .update('I love cupcakes')
                   .digest('hex');

console.log(hash); // 输出:加密后的散列值

这段代码使用 HMAC 和 SHA-256 散列算法创建了一个散列值。

FS — 文件

fs 模块提供了与文件系统的交互功能,包括读取文件、写入文件、操作目录等。

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

fs.readFile('file.txt', (err, data) => {
    if (err) throw err;
    console.log(data.toString());
});

这段代码异步地读取 file.txt 文件的内容,并在回调函数中打印。

Timer — 定时器

Node.js 的 timer 模块提供了定时器功能,如 setTimeoutsetIntervalsetImmediate

// 定时器示例
setTimeout(() => {
    console.log('This message is shown after 3 seconds');
}, 3000);

上面的代码设置了一个定时器,它将在 3 秒后执行指定的回调函数。