6 videos 📅 2026-01-21 09:30:00 Asia/Chongqing
1:55:17
2026-01-21 09:23:54
1:12:54
2026-01-21 13:12:26
43:59
2026-01-21 15:31:37
1:32:52
2026-01-22 09:25:11
3:03:22
2026-01-22 13:10:26
1:03:41
2026-01-23 10:32:58

Course recordings on DaDesktop for Training platform

Summary

Overview

本课程系统讲解了基于 Node.js 的全栈 Web 应用开发流程,涵盖包管理器(NPM/PM)的使用与优化、国内源配置、HTTP 服务器搭建、RESTful API 设计、前后端交互、表单验证、跨域安全策略(CORS)及服务器端数据校验等核心内容。通过一个“生产报表管理系统”实战项目,演示了从后端服务启动、前端页面交互到数据提交与验证的完整闭环,强调前后端双重校验的安全开发原则。


Topic (Timeline)

1. NPM 包管理问题与 PM 的引入 [00:00:04.240 - 00:02:51.780]

  • NPM 会为不同项目安装多个版本的依赖包,导致磁盘空间浪费(如多个 MIDI Player 1.0 和 2.0 共存)。
  • 大型 Node.js 项目可能占用高达 10GB 的磁盘空间,严重影响小容量硬盘(如 128GB)的项目开发能力。
  • PM 被提出作为更优的包管理解决方案,其使用方式与 NPM 基本一致,推荐作为主流工具。

2. 国内网络问题与 npm 源切换 [00:02:51.780 - 00:06:22.920]

  • 国内访问 npm 官方源(境外)存在下载慢或失败问题。
  • 阿里巴巴提供国内镜像源,可显著提升下载速度。
  • 推荐新环境执行命令切换源(Windows 需先调整安全策略)。
  • 介绍 axios 作为 HTTP 请求封装库,用于简化前后端通信(后续项目中使用)。

3. HTTP 服务器搭建与核心模块 [00:06:22.920 - 00:09:15.880]

  • 使用 Node.js 内置模块创建 HTTP 服务器:
    • http:提供 HTTP 协议封装,用于创建服务器。
    • fs:文件系统操作(读/写/删文件)。
    • path:路径拼接与解析(如文件名与扩展名分离)。
    • url:URL 解析与处理。
  • 通过 http.createServer() 创建服务器,使用 .listen(3000) 监听本地 3000 端口。
  • 服务器相当于一个“门牌号”,浏览器访问 localhost:3000 即可连接。

4. HTTP 请求方法与 API 设计 [00:09:16.880 - 00:15:16.310]

  • 五种常用 HTTP 方法:
    • GET:获取资源(如加载生产报表)。
    • POST:创建新资源(如提交生产记录)。
    • PUT:更新已有资源(通过 ID 定位)。
    • DELETE:删除资源。
    • OPTIONS:跨域预检请求(开发中通常直接返回 200)。
  • 服务器通过 request.methodrequest.url 匹配路径与方法,执行对应逻辑。
  • 使用 JSON.stringify() 将对象转为 JSON 字符串返回前端。
  • 未匹配路径时,尝试返回本地 index.html 文件;若文件不存在或读取失败,返回错误响应。

5. 跨域访问(CORS)机制与配置 [00:15:16.310 - 00:25:23.800]

  • 浏览器同源策略限制:仅允许同域名(如 baidu.com)下的页面访问其 API,跨域请求(如 taobao.combaidu.com)会被拒绝。
  • CORS 通过响应头 Access-Control-Allow-Origin 控制允许访问的源。
  • 服务器配置示例:
    • Access-Control-Allow-Origin: *:允许任意源(开发环境)。
    • Access-Control-Allow-Methods: GET, POST, OPTIONS:限制允许的请求方法。
    • Access-Control-Allow-Headers:允许自定义请求头。
  • 实际项目中,CORS 配置应由 Nginx 等网关统一管理,而非硬编码在代码中。

6. 前端交互:表单绑定与事件拦截 [00:25:27.520 - 00:31:54.560]

  • 前端通过 document.getElementById('production-form') 获取表单元素。
  • 使用 addEventListener('submit', handler) 拦截表单默认提交行为,避免页面跳转。
  • 通过 axios 发送 POST 请求至 /api/production/submit,提交表单数据。
  • 成功后:刷新报表、重置表单;失败时:显示错误提示。
  • 传统表单提交会触发页面刷新,而 JS 拦截实现无刷新体验(SPA 模式)。

7. 表单前端验证逻辑 [00:32:01.120 - 00:39:48.900]

  • 验证字段:生产日期、产品名称、生产数量。
  • 验证规则:
    • 日期不能为未来时间。
    • 产品名称必填。
    • 数量必须为正整数,且 ≤10000。
  • 验证失败时,显示具体错误信息;成功则提交数据。
  • 强调:前端验证仅提升体验,不能替代后端验证

8. 项目运行与调试流程 [00:39:57.600 - 00:47:34.890]

  • 在终端执行 node server.js 启动服务器,监听 localhost:3000
  • 浏览器访问 http://localhost:3000 加载前端页面,自动加载 axios-min.jsstyle.cssscript.js 等静态资源。
  • 通过浏览器 DevTools(F12)的 Network 面板观察请求:
    • GET / → 加载主页。
    • GET /api/production/report → 获取生产数据(返回 JSON)。
    • POST /api/production/submit → 提交数据(携带 payload)。
  • 服务器返回 {"success": true, "data": [...]} 结构,前端据此更新 UI。

9. 服务器端数据校验与安全原则 [00:47:34.890 - 01:02:43.460]

  • 核心原则:任何客户端数据均不可信,必须在服务端重复验证。
  • 前端验证代码(JS)需在后端(Node.js)重写,但需适配无 DOM 环境:
    • 移除 DOM 操作(如清空错误提示、修改样式)。
    • 仅返回 isValid: boolean 和错误信息。
  • 使用 JSON.parse() 将请求体(req.body)从字符串转为对象。
  • 引入 try-catch 处理 JSON.parse() 异常,防止服务器崩溃。
  • 若未加 try-catch,非法请求会导致 Node.js 进程直接退出(服务宕机)。

10. 使用 curl 模拟非浏览器请求与调试 [01:02:45.660 - 01:09:11.900]

  • 使用 curl 命令行工具模拟非浏览器客户端(如自动化脚本)访问 API。
  • 需手动设置请求头:Content-Type: application/json
  • 通过 console.log() 输出接收到的请求体,进行调试。
  • 演示:发送非法数据(如未来日期)→ 服务端验证失败 → 返回 400 或拒绝处理。
  • 强调:服务器端验证是安全防线,前端验证是体验优化

11. 课后挑战:功能扩展 [01:09:14.320 - 01:12:32.400]

  • 挑战一(简单):将“提交”按钮改为“更新”功能,根据 ID 修改已有记录(而非新增)。
  • 挑战二(困难):新增“删除”功能:
    • 提供输入框,允许用户输入记录 ID。
    • 点击“删除”按钮,向 /api/production/delete 发送 DELETE 请求。
    • 服务端根据 ID 删除对应记录并返回结果。

Appendix

Key Principles

  • 双重验证:前端验证提升体验,后端验证保障安全,二者缺一不可。
  • 不可信客户端:任何来自客户端的数据(包括请求头、参数、JSON)都必须在服务端重新校验。
  • 异常防护:使用 try-catch 包裹 JSON.parse() 等易出错操作,避免服务崩溃。
  • CORS 配置:生产环境应限制 Access-Control-Allow-Origin 为可信域名,避免使用 *

Tools Used

  • Node.js:运行时环境。
  • NPM / PM:包管理器。
  • axios:HTTP 客户端库(前端)。
  • http, fs, path, url:Node.js 内置核心模块。
  • curl:命令行 HTTP 客户端(用于调试)。
  • Browser DevTools (F12):网络请求分析、调试。

Common Pitfalls

  • 仅依赖前端验证,导致 API 被恶意调用。
  • 未使用 try-catch 处理 JSON.parse(),服务因非法 JSON 崩溃。
  • 误将 POST /api/production/report 当作提交路径(应为 /api/production/submit)。
  • 忽略 OPTIONS 预检请求,导致跨域失败。

Practice Suggestions

  • 手动实现“更新”和“删除”功能,巩固 RESTful API 理解。
  • 尝试用 curl 发送不同格式的请求(如缺少 Content-Type、非法 JSON),观察服务端行为。
  • 将 CORS 配置从代码中移至 Nginx,学习生产级部署模式。
  • 为服务器添加日志记录,追踪请求来源与处理结果。