diff --git "a/\345\220\264\345\256\232\346\263\242/20260316-\345\237\272\346\234\254\345\206\205\347\275\256\346\250\241\345\235\227.md" "b/\345\220\264\345\256\232\346\263\242/20260316-\345\237\272\346\234\254\345\206\205\347\275\256\346\250\241\345\235\227.md" new file mode 100644 index 0000000000000000000000000000000000000000..b1acdaa3d4042f05515499c9a8e448deeb88eff9 --- /dev/null +++ "b/\345\220\264\345\256\232\346\263\242/20260316-\345\237\272\346\234\254\345\206\205\347\275\256\346\250\241\345\235\227.md" @@ -0,0 +1,57 @@ +### 笔记 +``` +Node.js 内置模块是 Node.js 运行时自带的、无需额外安装即可使用的核心功能模块。这些模块提供了基础的系统功能,如文件操作、网络通信、进程管理等,是 Node.js 开发的基础工具。 + +与需要通过 npm 安装的第三方模块不同,内置模块可以直接通过 require() 函数加载使用,例如: + +const fs = require('fs'); // 文件系统模块 +const http = require('http'); // HTTP 模块 + +1. fs (文件系统模块) +fs 模块提供了与文件系统交互的 API,支持同步和异步两种操作方式。 + +主要功能: + +读写文件 +创建/删除目录 +监视文件变化 +获取文件信息 + +2. path (路径模块) +path 模块提供处理文件和目录路径的工具函数,可以跨平台使用。 + +常用方法: + +path.join() - 连接路径 +path.resolve() - 解析为绝对路径 +path.basename() - 获取文件名 +path.extname() - 获取文件扩展名 + +3.http (HTTP 模块) +http 模块允许 Node.js 作为 HTTP 服务器或客户端运行。 + +主要功能: + +创建 HTTP 服务器 +发起 HTTP 请求 +处理 HTTP 请求和响应 + +4. events (事件模块) +events 模块提供了事件驱动的编程接口,是 Node.js 异步编程的基础。 + +核心概念: + +EventEmitter 类 +事件监听 (on) +事件触发 (emit) + +5. os (操作系统模块) +os 模块提供与操作系统相关的实用方法和属性。 + +常用功能: + +获取 CPU 信息 +获取内存信息 +获取网络接口信息 +获取系统临时目录 +``` \ No newline at end of file diff --git "a/\345\220\264\345\256\232\346\263\242/20260318-\345\206\205\347\275\256\346\250\241\345\235\227.md" "b/\345\220\264\345\256\232\346\263\242/20260318-\345\206\205\347\275\256\346\250\241\345\235\227.md" new file mode 100644 index 0000000000000000000000000000000000000000..b1acdaa3d4042f05515499c9a8e448deeb88eff9 --- /dev/null +++ "b/\345\220\264\345\256\232\346\263\242/20260318-\345\206\205\347\275\256\346\250\241\345\235\227.md" @@ -0,0 +1,57 @@ +### 笔记 +``` +Node.js 内置模块是 Node.js 运行时自带的、无需额外安装即可使用的核心功能模块。这些模块提供了基础的系统功能,如文件操作、网络通信、进程管理等,是 Node.js 开发的基础工具。 + +与需要通过 npm 安装的第三方模块不同,内置模块可以直接通过 require() 函数加载使用,例如: + +const fs = require('fs'); // 文件系统模块 +const http = require('http'); // HTTP 模块 + +1. fs (文件系统模块) +fs 模块提供了与文件系统交互的 API,支持同步和异步两种操作方式。 + +主要功能: + +读写文件 +创建/删除目录 +监视文件变化 +获取文件信息 + +2. path (路径模块) +path 模块提供处理文件和目录路径的工具函数,可以跨平台使用。 + +常用方法: + +path.join() - 连接路径 +path.resolve() - 解析为绝对路径 +path.basename() - 获取文件名 +path.extname() - 获取文件扩展名 + +3.http (HTTP 模块) +http 模块允许 Node.js 作为 HTTP 服务器或客户端运行。 + +主要功能: + +创建 HTTP 服务器 +发起 HTTP 请求 +处理 HTTP 请求和响应 + +4. events (事件模块) +events 模块提供了事件驱动的编程接口,是 Node.js 异步编程的基础。 + +核心概念: + +EventEmitter 类 +事件监听 (on) +事件触发 (emit) + +5. os (操作系统模块) +os 模块提供与操作系统相关的实用方法和属性。 + +常用功能: + +获取 CPU 信息 +获取内存信息 +获取网络接口信息 +获取系统临时目录 +``` \ No newline at end of file diff --git "a/\345\220\264\345\256\232\346\263\242/20260319-\350\267\257\345\276\204.md" "b/\345\220\264\345\256\232\346\263\242/20260319-\350\267\257\345\276\204.md" new file mode 100644 index 0000000000000000000000000000000000000000..3bcf3e682c69461e49c47139a3c084c328bf0e42 --- /dev/null +++ "b/\345\220\264\345\256\232\346\263\242/20260319-\350\267\257\345\276\204.md" @@ -0,0 +1,51 @@ +```js +import fs from 'fs' +import { log } from 'console'; + +// 拿到参数 +let dirPath = process.argv[2]; + + +// 调用函数 +browser(dirPath); + +function browser(dir, indent = 0) { + // 判断路径是否存在 + if (!fs.existsSync(dir)) { + log('路径不存在,请确认后重试'); + return; + } + + if(!isDirectory(dir)){ + log('路径不是个目录'); + return; + } + + let prefix = ' '.repeat(indent); + + // 读取目录内容 + let arr = fs.readdirSync(dir); + + // 遍历目录目录内容 + arr.forEach(item => { + // 如果是目录,则继续调用browser方法,递归显示目录信息;如果是文件,则直接输出 + + // 拼接项目的完整路径,准备判断是文件还是目录 + let fullPath = dir + '/' + item; + // 根据拼接的项目的完整路径,拿到其状态信息 + let fileStat = fs.statSync(fullPath); + if (fileStat.isDirectory()) { + log(prefix + item); + browser(fullPath, indent + 1) + } else { + log(prefix + item) + } + }) +} + +function isDirectory(dir) { + let fileStat = fs.statSync(dir); + return fileStat.isDirectory(); + +} +``` \ No newline at end of file diff --git "a/\345\220\264\345\256\232\346\263\242/20260320-http\346\250\241\345\235\227.md" "b/\345\220\264\345\256\232\346\263\242/20260320-http\346\250\241\345\235\227.md" new file mode 100644 index 0000000000000000000000000000000000000000..9fd8475480eacde620ae044caaffe09e3cf46c4d --- /dev/null +++ "b/\345\220\264\345\256\232\346\263\242/20260320-http\346\250\241\345\235\227.md" @@ -0,0 +1,91 @@ +1.创建HTTP服务器 +```js +(1)简单的服务器 + const http = require('http'); + +// 创建服务器 +const server = http.createServer((req, res) => { + // req: 请求对象 + // res: 响应对象 + + // 返回响应 + res.writeHead(200, { 'Content-Type': 'text/plain' }); + res.end('Hello World!'); +}); + + // 监听端口 +server.listen(3000, () => { + console.log('服务器运行在 http://localhost:3000'); +}); +(2)请求对象(req) +const server = http.createServer((req, res) => { + // 请求方法 + console.log('方法:', req.method); // GET, POST, PUT, DELETE + + // 请求URL + console.log('URL:', req.url); // /, /about, /api/user + + // 请求头 + console.log('User-Agent:', req.headers['user-agent']); + + // URL路径(不含查询字符串) + const urlObj = new URL(req.url, `http://${req.headers.host}`); + console.log('路径:', urlObj.pathname); + + // 查询参数 + console.log('参数:', urlObj.searchParams.get('name')); + + res.end('OK'); +}); +(3)响应对象(res) +const server = http.createServer((req, res) => { + // 1. 设置状态码 + res.statusCode = 200; // 成功 + res.statusCode = 404; // 未找到 + res.statusCode = 500; // 服务器错误 + + // 2. 设置响应头 + res.setHeader('Content-Type', 'text/html; charset=utf-8'); + res.setHeader('Content-Type', 'application/json'); + res.setHeader('Set-Cookie', 'name=zhangsan'); + + // 3. 写入响应头 + res.writeHead(200, { + 'Content-Type': 'text/html; charset=utf-8', + 'Access-Control-Allow-Origin': '*' + }); + + // 4. 发送响应体 + res.end('Hello'); + + // 或者发送JSON + res.end(JSON.stringify({ name: '张三', age: 20 })); +}); +``` + +案例 +```js +export function rest(req) { + let method = req.method; + let path = req.url; + + let content = ''; + + if (method == 'GET' && path == '/api/blogs') { + content = '获取博客列表'; + } else if (method == 'GET' && path == '/api/blogs/2') { + content = '获取指定Id的博客'; + } else if (method == 'POST' && path == '/api/blogs') { + content = '新增博客'; + } else if (method == 'PUT' && path == '/api/blogs/2') { + content = '修改博客'; + } else if (method == 'DELETE' && path == '/api/blogs/2') { + content = '删除指定博客'; + } else { + content = '无操作'; + } + + return content; + +} +```