JavaScript (Node.js) 标准库:完整概述
Node.js 是一个基于 V8 引擎构建的 JavaScript 运行时环境。其主要优势之一在于拥有丰富的标准库,提供了数百个现成的模块,用于解决后端开发中的日常任务:从文件系统操作到创建 HTTP 服务器。在本文中,我们将介绍关键模块、它们的功能,并提供实用的代码示例。
1. fs 模块 (File System)
fs 模块是处理文件和目录的基础。它同时支持同步和异步操作。
- 读取文件(异步):
const fs = require('fs');
fs.readFile('example.txt', 'utf8', (err, data) => { if (err) throw err; console.log(data);});- 写入文件:
fs.writeFile('output.txt', 'Hello, Node.js!', (err) => { if (err) throw err; console.log('文件已保存');});- 目录操作(创建、删除、读取):
// 创建文件夹fs.mkdir('newDir', { recursive: true }, (err) => { if (err) throw err; console.log('文件夹已创建');});
// 读取文件夹内容fs.readdir('.', (err, files) => { console.log(files); // 文件名数组});2. path 模块
path 模块简化了文件和文件夹路径的处理,且与操作系统无关。
- 路径拼接:
const path = require('path');
const fullPath = path.join('users', 'admin', 'docs', 'file.txt');console.log(fullPath); // 在 Linux 中为 users/admin/docs/file.txt,在 Windows 中为 users\\admin\\docs\\file.txt- 获取文件扩展名:
const ext = path.extname('image.png');console.log(ext); // '.png'- 路径规范化(去除多余的“..”和“.”):
const normalized = path.normalize('/foo/bar//baz/asdf/quux/..');console.log(normalized); // /foo/bar/baz/asdf3. http 模块
允许创建 HTTP 服务器和客户端。Express.js 等框架正是基于此模块构建的。
- 简单的 HTTP 服务器:
const http = require('http');
const server = http.createServer((req, res) => { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('你好,世界!');});
server.listen(3000, () => { console.log('服务器已在端口 3000 上启动');});- HTTP 客户端(发起 GET 请求):
http.get('http://jsonplaceholder.typicode.com/posts/1', (res) => { let data = ''; res.on('data', chunk => data += chunk); res.on('end', () => console.log(JSON.parse(data)));});4. events 模块
实现了“观察者”模式 (EventEmitter)。允许创建自定义事件并订阅它们。
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
// 订阅事件myEmitter.on('greet', (name) => { console.log(`你好,${name}!`);});
// 触发事件myEmitter.emit('greet', '阿列克谢'); // 你好,阿列克谢!5. buffer 模块
Buffer 是用于存储二进制数据的临时存储区。在处理流、文件、网络协议时使用。
// 从字符串创建缓冲区const buf = Buffer.from('Hello', 'utf8');console.log(buf); // <Buffer 48 65 6c 6c 6f>
// 缓冲区拼接const buf1 = Buffer.from('Node');const buf2