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

markdown,nodejs前世今生以及内置模块相关知识点

一.markdown文件笔记的编写
在这里插入图片描述

二.node前世今生

在这里插入图片描述

以下是关于 Node.js 内置模块 的核心知识点总结,涵盖常用模块的功能、用法及典型场景:

一、核心内置模块概览

Node.js 提供了丰富的内置模块,无需额外安装即可直接使用。以下是最常用的模块分类及功能:

模块名称功能描述
fs文件系统操作(读写文件、目录操作等)
path处理文件路径(解析、拼接、规范化路径等)
http / https构建 HTTP/HTTPS 服务器或客户端
url解析和格式化 URL
querystring处理 URL 查询字符串(序列化/反序列化)
events事件驱动模型(自定义事件Emitter)
stream流操作(处理大文件、网络数据等流式数据)
buffer处理二进制数据(Buffer 类)
os操作系统相关信息(内存、CPU、平台等)
process进程相关信息(环境变量、退出码、信号处理等)
child_process创建子进程(执行命令行程序、多进程通信等)
util工具函数(格式化字符串、类型检查、回调转 Promise 等)
timers定时器(setTimeoutsetInterval 等)
crypto加密解密(哈希、加密算法、签名等)

二、重点内置模块详解

1. fs 模块(文件系统)

功能:实现同步/异步文件操作,支持流式读写。
核心方法

  • 同步操作(阻塞主线程,谨慎使用):
    • fs.readFileSync(path, options):同步读取文件。
    • fs.writeFileSync(path, data, options):同步写入文件。
  • 异步操作(推荐,基于回调或 Promise):
    • fs.readFile(path, options, callback):异步读取文件。
    • fs.writeFile(path, data, options, callback):异步写入文件。
  • 流式操作(处理大文件):
    const fs = require('fs');
    const readStream = fs.createReadStream('input.txt');
    const writeStream = fs.createWriteStream('output.txt');
    readStream.pipe(writeStream); // 管道流,高效传输数据
    
  • 目录操作
    • fs.mkdir(path, options, callback):创建目录。
    • fs.readdir(path, options, callback):读取目录内容。

注意options 常用参数:encoding(编码,如 'utf8')、flag(文件操作标志,如 'a' 表示追加)。

2. http 模块(HTTP 服务器)

功能:构建 HTTP 服务器,处理请求/响应。
基本用法

const http = require('http');const server = http.createServer((req, res) => {res.statusCode = 200;res.setHeader('Content-Type', 'text/plain');res.end('Hello, Node.js!\n');
});server.listen(3000, 'localhost', () => {console.log('Server running at http://localhost:3000/');
});

核心概念

  • Request 对象:包含请求方法、URL、头部、数据等。
  • Response 对象:用于设置响应状态码、头部、返回数据。
  • 路由处理:通过 req.urlreq.method 判断请求路径和方法。
3. path 模块(路径处理)

功能:处理不同操作系统的文件路径(避免 \/ 差异)。
常用方法

  • path.join(...paths):拼接路径(自动处理分隔符)。
    path.join('/user', 'docs', 'file.txt'); // 结果:'/user/docs/file.txt'(Windows 下为 '\user\docs\file.txt')
    
  • path.resolve(...paths):将相对路径转为绝对路径。
    path.resolve('./src', 'index.js'); // 结果:当前工作目录 + '/src/index.js'
    
  • path.parse(path):解析路径为对象(包含根、目录、文件名等)。
  • path.extname(path):获取文件扩展名(如 .txt)。
4. events 模块(事件驱动)

功能:实现自定义事件发射器(Emitter),解耦代码逻辑。
用法示例

const EventEmitter = require('events').EventEmitter;
const emitter = new EventEmitter();// 监听事件
emitter.on('message', (data) => {console.log('Received message:', data);
});// 触发事件
emitter.emit('message', 'Hello from emitter!');

核心方法

  • on(eventName, listener):绑定事件监听器。
  • emit(eventName, ...args):触发事件并传递参数。
  • once(eventName, listener):绑定只触发一次的监听器。
5. stream 模块(流操作)

功能:处理流式数据(如文件读写、网络传输),避免内存占用过高。
流的类型

  • 可读流(Readable):如文件读取流。
  • 可写流(Writable):如文件写入流。
  • 双工流(Duplex):同时支持读写(如网络套接字)。
  • 转换流(Transform):处理数据并转换(如压缩/解压缩)。

管道示例(文件复制):

const fs = require('fs');
const readStream = fs.createReadStream('input.txt');
const writeStream = fs.createWriteStream('output.txt');
readStream.pipe(writeStream); // 自动处理数据流动
6. util 模块(工具函数)

功能:提供实用工具函数,简化开发。
常用方法

  • util.format(format, ...args):格式化字符串(类似 printf)。
    util.format('Hello, %s! You have %d messages.', 'Alice', 5); // "Hello, Alice! You have 5 messages."
    
  • util.promisify(fn):将回调函数转为 Promise。
    const fs = require('fs');
    const util = require('util');
    const readFile = util.promisify(fs.readFile); // 将 fs.readFile 转为 Promise 形式
    readFile('data.json', 'utf8').then(data => JSON.parse(data));
    
7. process 对象(当前进程)

功能:访问当前 Node.js 进程的信息和控制其行为。
常用属性/方法

  • process.argv:命令行参数数组(argv[0] 是 Node 路径,argv[1] 是脚本路径)。
  • process.env:环境变量对象(如 process.env.NODE_ENV)。
  • process.exit(code):退出进程(code 为退出码,0 表示成功)。
  • process.on('exit', callback):监听进程退出事件。

三、进阶模块与场景

1. child_process 模块(子进程)

功能:创建子进程,执行外部程序或 Node 脚本。
方法示例

  • child_process.exec(command, callback):执行 shell 命令(如 ls -l)。
    const { exec } = require('child_process');
    exec('ls -l', (err, stdout, stderr) => {if (err) throw err;console.log('stdout:', stdout);
    });
    
  • child_process.fork(modulePath):创建 Node 子进程(支持 IPC 通信)。
2. crypto 模块(加密解密)

功能:实现加密算法(如 MD5、SHA-1、AES 等)。
哈希示例

const crypto = require('crypto');
const hash = crypto.createHash('sha256');
hash.update('Hello, Node.js!');
console.log(hash.digest('hex')); // 输出 SHA-256 哈希值

对称加密示例(AES)

const crypto = require('crypto');
const algorithm = 'aes-256-cbc';
const key = crypto.scryptSync('secret-key', 'salt', 32); // 生成密钥
const iv = crypto.randomBytes(16); // 初始化向量// 加密
const cipher = crypto.createCipheriv(algorithm, key, iv);
let encrypted = cipher.update('敏感数据', 'utf8', 'hex');
encrypted += cipher.final('hex');// 解密
const decipher = crypto.createDecipheriv(algorithm, key, iv);
let decrypted = decipher.update(encrypted, 'hex', 'utf8');
decrypted += decipher.final('utf8');
3. buffer 模块(二进制数据)

功能:处理二进制数据(如图片、音频、网络协议数据)。
创建 Buffer

const buffer = Buffer.from('Hello, Buffer!', 'utf8'); // 从字符串创建
const buffer2 = Buffer.alloc(10); // 分配指定大小的 Buffer(初始化为 0)

转换为字符串

buffer.toString('utf8'); // "Hello, Buffer!"

四、最佳实践与注意事项

  1. 异步优先
    避免使用同步方法(如 fs.readFileSync),除非必要,以免阻塞事件循环。
  2. 流的使用场景
    处理大文件或高吞吐量数据时,优先使用流(stream)而非一次性读取内存。
  3. 路径兼容性
    始终使用 path 模块处理路径,确保跨平台兼容性。
  4. 事件驱动设计
    通过 events 模块解耦组件,避免过度耦合。
  5. 安全加密
    使用 crypto 模块时,优先选择高强度算法(如 SHA-256、AES-256),避免弱加密。

五、模块引入方式

Node.js 使用 CommonJS 规范 引入模块:

const moduleName = require('module-name'); // 引入内置模块
const myModule = require('./my-module'); // 引入自定义模块

通过掌握这些内置模块,你可以高效实现文件操作、网络服务、数据处理等核心功能,构建高性能的 Node.js 应用。
下周计划
将小组布置的考核任务完成
生活感悟
知识点未掌握好好学习

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

相关文章:

  • AI原生应用实战:用户画像建模的7种机器学习方法
  • 力扣面试150题--蛇梯棋
  • 开发Vue.js组件的二三事
  • if 选择结构
  • 下载https协议的网络图片,并转为Base64
  • 浅谈非理想性因素对星座图的影响
  • ArcGIS Pro制作水平横向图例+多级标注
  • PIN码vs密码,电脑登录的快捷键你用对了吗?
  • CppCon 2015 学习:STL Algorithms in Action
  • Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
  • The Trade Desk推出DealDesk,试图让交易ID不再糟糕
  • HTTP 与 TCP 协议的区别与联系
  • 【C++】unordered_set和unordered_map
  • tauri项目,如何在rust端读取电脑环境变量
  • 画质MxPro:优化手游体验,畅享高清画质
  • Linux初步介绍
  • 【VLNs篇】07:NavRL—在动态环境中学习安全飞行
  • 多轮对话实现
  • react更新页面数据,操作页面,双向数据绑定
  • 免费数学几何作图web平台
  • 在阿里云上搭建n8n
  • React Native 弹窗组件优化实战:解决 Modal 闪烁与动画卡顿问题
  • 【Mini-F5265-OB开发板试用测评】1、串口printf输出
  • C++中auto和auto
  • 芯片设计中的通信“动脉”:I2C与I3C IP深度解析
  • ubuntu清理垃圾
  • CTFshow-PWN-栈溢出(pwn48)
  • 【深度学习新浪潮】大模型中,active parameters和total parameters都是什么?
  • “扛不住了就排队!”——聊聊消息队列在高并发系统中的那些硬核用途
  • STM32使用旋转电位器自制调光灯