当前位置: 首页 > backend >正文

nodejs03-常用模块

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’);
常用方法

  1. path.join([…paths]) - 连接路径
    const fullPath = path.join(‘/user’, ‘documents’, ‘file.txt’);
    console.log(fullPath);
    // 在 Unix 上输出: /user/documents/file.txt
    // 在 Windows 上输出: \user\documents\file.txt

  2. path.resolve([…paths]) - 解析绝对路径
    const absolutePath = path.resolve(‘src’, ‘app.js’);
    console.log(absolutePath);
    // 输出当前工作目录下的绝对路径,如: /home/user/project/src/app.js

  3. path.basename(path[, ext]) - 获取文件名
    console.log(path.basename(‘/user/docs/file.txt’)); // file.txt
    console.log(path.basename(‘/user/docs/file.txt’, ‘.txt’)); // file

  4. path.dirname(path) - 获取目录名
    console.log(path.dirname(‘/user/docs/file.txt’)); // /user/docs

  5. 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);

文件读取和写入:

http://www.xdnf.cn/news/17818.html

相关文章:

  • LeetCode 53.最大子数组和:贪心算法下的连续子数组最优解
  • 【测试用例】
  • STM32 - Embedded IDE - GCC - 解决LWRB库在GCC编译器会编译失败,在ARMCC编译器时却正常编译
  • 肖臻《区块链技术与应用》第16讲 - 以太坊的“世界状态”:从哈希表到MPT架构演进
  • 安装openmmlab时出错
  • IStoreOS(OpenWrt)开启IPV6
  • LeetCode 刷题【42. 接雨水】
  • 大规模Go网络应用的部署与监控实战指南
  • python30-正则表达式
  • 应急救援智能接处警系统——科技赋能应急,筑牢安全防线
  • 线程P5 | 单例模式[线程安全版]~懒汉 + 饿汉
  • 从0开始学习Java+AI知识点总结-15.后端web基础(Maven基础)
  • UI-TARS-Desktop 产品发展史:从实验室原型到企业级解决方案
  • 流处理、实时分析与RAG驱动的Python ETL框架:构建智能数据管道(中)
  • python中的map函数
  • Android UI(一)登录注册 - Compose
  • 【数据可视化-89】基孔肯雅热病例数据分析与可视化:Python + pyecharts洞察疫情动态
  • RH134 管理基本存储知识点
  • 【C#补全计划】泛型约束
  • OpenCv(二)——边界填充、阈值处理
  • 37 C++ STL模板库6-string_view
  • Mybatis实现页面增删改查
  • 解锁AI潜能:五步写出让大模型神级指令
  • C#面试题及详细答案120道(01-10)-- 基础语法与数据类型
  • 《嵌入式 C 语言编码规范个人笔记》参考华为C语言规范标准
  • 机器学习-支持向量机器(SVM)
  • CPP模板编程
  • Python学习-----3.基础语法(2)
  • 广义矩估计随机近似中1.2和2.1的差异
  • 如何手动开启 Hyper-V?Windows 10/11 详细开启教程