nodejs 常用的核心模块
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,
它允许 JavaScript 运行在服务器端。Node.js 拥有丰富的标准库,也就是核心模块,
这些模块提供了各种功能,
使得开发服务器端应用程序变得简单高效。以下是一些 Node.js 中常用的核心模块
1:http 和 https:
用于创建 HTTP 和 HTTPS 服务器
const http = require(‘http’);
http.createServer((req, res) => {
res.writeHead(200, {‘Content-Type’: ‘text/plain’});
res.end(‘Hello World\n’);
}).listen(1337, ‘127.0.0.1’);
console.log(‘Server running at http://127.0.0.1:1337/’);
2:fs(文件系统):
用于读写文件系统中的文件。
示例代码:
const fs = require(‘fs’);
fs.readFile(‘input.txt’, ‘utf8’, (err, data) => {
if (err) {
console.error(err);
return;
}
console.log(data);
});
3:path:
用于处理文件和目录的路径。
示例代码:
const path = require(‘path’);
常用方法
-
path.join([…paths]) - 连接路径
const fullPath = path.join(‘/user’, ‘documents’, ‘file.txt’);
console.log(fullPath);
// 在 Unix 上输出: /user/documents/file.txt
// 在 Windows 上输出: \user\documents\file.txt -
path.resolve([…paths]) - 解析绝对路径
const absolutePath = path.resolve(‘src’, ‘app.js’);
console.log(absolutePath);
// 输出当前工作目录下的绝对路径,如: /home/user/project/src/app.js -
path.basename(path[, ext]) - 获取文件名
console.log(path.basename(‘/user/docs/file.txt’)); // file.txt
console.log(path.basename(‘/user/docs/file.txt’, ‘.txt’)); // file -
path.dirname(path) - 获取目录名
console.log(path.dirname(‘/user/docs/file.txt’)); // /user/docs -
path.extname(path) - 获取扩展名
console.log(path.extname(‘index.html’)); // .html
console.log(path.extname(‘file’)); // 空字符串
path.sep - 平台特定的路径分隔符 console.log(path.sep); // Windows 输出 ‘’, Unix 输出 ‘/’
path.delimiter - 平台特定的路径分隔符(用于 PATH 环境变量) console.log(path.delimiter); // Windows 输出 ‘;’, Unix 输出 ‘:’
路径规范化
使用 path.normalize(path) 可以规范化路径,处理多余的 .、… 和分隔符:
console.log(path.normalize(‘/user//docs/…/file.txt’)); // /user/file.txt
路径解析与格式转换
path.parse(path) - 解析路径为对象
const pathObj = path.parse(‘/user/docs/file.txt’);
console.log(pathObj);
/*
{
root: ‘/’,
dir: ‘/user/docs’,
base: ‘file.txt’,
ext: ‘.txt’,
name: ‘file’
}
*/
path.format(pathObject) - 从对象构建路径
const pathStr = path.format({
dir: ‘/user/docs’,
name: ‘file’,
ext: ‘.txt’
});
console.log(pathStr); // /user/docs/file.txt
实际应用示例
示例 1: 构建跨平台的文件路径
const configPath = path.join(__dirname, ‘config’, ‘settings.json’);
console.log(configPath);
示例 2: 处理用户上传的文件
function saveUploadedFile(uploadDir, originalName) {
const ext = path.extname(originalName);
const baseName = path.basename(originalName, ext);
const timestamp = Date.now();
const newFileName = ${baseName}_${timestamp}${ext}
;
return path.join(uploadDir, newFileName);
}
示例 3: 检查文件扩展名
function isImageFile(filename) {
const ext = path.extname(filename).toLowerCase();
return [‘.jpg’, ‘.jpeg’, ‘.png’, ‘.gif’].includes(ext);
}
os:
提供有关操作系统、计算机和网络接口的信息
const os = require(‘os’);
console.log(os.platform()); // 输出: 例如 ‘darwin’、‘win32’ 或 ‘linux’
url:
用于解析和格式化 URL
const url = require(‘url’);
const myUrl = new URL(‘http://www.example.com’);
console.log(myUrl.hostname); // 输出: www.example.com
events:
提供基本的 EventEmitter 实现,用于处理事件
const EventEmitter = require(‘events’);
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
myEmitter.on(‘event’, () => {
console.log(‘an event occurred!’);
});
myEmitter.emit(‘event’); // 输出: an event occurred!
util:
提供了一些实用工具函数,如 util.promisify,用于将回调风格的函数转换为返回 Promise 的函数。
示例代码:
const util = require(‘util’);
const fs = require(‘fs’);
const stat = util.promisify(fs.stat);
stat(‘.’).then((stats) => {
console.log(It's a ${stats.isDirectory() ? 'directory' : 'file'}
);
}).catch((error) => {
console.error(error);
});
stream:
提供了多种流对象,如可读流(Readable)、可写流(Writable)、双工流(Duplex)和转换流(Transform),用于高效地处理流式数据。
示例代码:使用 Readable 流:
const { Readable } = require(‘stream’);
const readableStream = Readable({
read() {} // 这里可以添加读取逻辑,但在这个例子中不实现任何读取逻辑。
});
readableStream.push('Hello ');
readableStream.push(‘World!\n’);
readable
=============================================
事件监听案例
const EventEmitter = require(‘events’);
var eventEmitter = new EventEmitter();
eventEmitter.on(‘click’, () => {
console.log(‘data received successfully.’);
});
eventEmitter.emit(‘click’,demo);
文件读取和写入: