Node.js 毕设实战 — 从入门到答辩

知识库
知识库文档
/tech-stacks/nodejs/tutorial/Node.js 毕设实战 — 从入门到答辩.md

文档

Node.js 毕设实战教程

前言

Node.js 是大学毕设的热门选择,因为它一门语言打穿前后端。本教程将带你从零构建一个完整的毕设后端。

第一章:理解事件循环

Node.js 的核心是 事件循环(Event Loop)。与传统的多线程模型不同,Node.js 用单线程处理所有请求:

  请求1 ──→ [Event Loop] ──→ 非阻塞I/O ──→ 回调1
  请求2 ──→               ──→ 非阻塞I/O ──→ 回调2
  请求3 ──→               ──→ CPU任务    ──→ 回调3

关键理解:CPU 密集任务会阻塞事件循环!一个大循环会让所有请求卡住。所以 Node.js 擅长 I/O 密集型(API 网关、实时聊天),不擅长视频编码、图像渲染。

// ❌ 阻塞事件循环
app.get('/slow', (req, res) => {
  for (let i = 0; i < 1e10; i++) {} // 所有请求都卡住
  res.send('done');
});

// ✅ 异步非阻塞
app.get('/fast', async (req, res) => {
  const data = await fetchDataFromDB(); // 不阻塞
  res.json(data);
});

第二章:项目结构最佳实践

毕设项目推荐的分层结构:

my-project/
├── src/
│   ├── controllers/    # 处理 HTTP 请求
│   ├── services/       # 业务逻辑
│   ├── models/         # 数据模型(Mongoose/Prisma)
│   ├── middlewares/    # 认证、日志、错误处理
│   ├── routes/         # 路由定义
│   ├── utils/          # 工具函数
│   └── app.js          # Express 实例
├── tests/
├── .env                # 环境变量
└── package.json

为什么这么分?

  • Controller 只负责取参数、调 Service、返回响应
  • Service 包含所有业务逻辑,可复用、可测试
  • Model 定义数据结构,与数据库交互

第三章:认证系统(JWT)

毕设中几乎每个项目都需要登录。JWT 是最简单的方案:

const jwt = require('jsonwebtoken');

// 登录 — 签发 Token
app.post('/login', (req, res) => {
  const { username, password } = req.body;
  // 验证账号密码(略)
  const token = jwt.sign(
    { userId: user.id, role: user.role },
    process.env.JWT_SECRET,
    { expiresIn: '7d' }
  );
  res.json({ token });
});

// 中间件 — 验证 Token
const authMiddleware = (req, res, next) => {
  const token = req.headers.authorization?.split(' ')[1];
  if (!token) return res.status(401).json({ error: '请先登录' });
  try {
    req.user = jwt.verify(token, process.env.JWT_SECRET);
    next();
  } catch {
    res.status(401).json({ error: 'Token 已过期' });
  }
};

// 保护路由
app.get('/profile', authMiddleware, (req, res) => {
  res.json({ userId: req.user.userId });
});

第四章:数据库选择指南

数据库 适用场景 Node.js ORM
MongoDB 灵活文档、快速原型 Mongoose
PostgreSQL 关系型、复杂查询 Prisma / TypeORM
SQLite 毕设演示、单文件 better-sqlite3
MySQL 传统 Web 应用 Prisma / Sequelize

推荐:毕设用 SQLite + Prisma,零配置,答辩时直接复制 .db 文件即可演示。

第五章:部署上线

# 使用 PM2 进程管理
npm install -g pm2
pm2 start src/app.js --name my-api
pm2 save
pm2 startup   # 开机自启

思考题

  1. 如果有个请求需要处理 10 秒,如何避免阻塞其他请求?
  2. JWT Token 存在前端哪里最安全?(提示:Cookie vs localStorage)
  3. 10 万用户同时在线,Node.js 单进程够用吗?(提示:PM2 cluster mode)

信息

路径
/tech-stacks/nodejs/tutorial/Node.js 毕设实战 — 从入门到答辩.md
更新时间
2026/5/30