入坑node.js全面指南(三)

前两篇文章详细讲解了node.js的知识点,本篇文章来实现一个经典的全栈待办事项(Todo List)应用,采用前后端分离架构。后端基于 Node.js + Express + TypeScript,前端基于 Vue 3 + TypeScript,数据持久化采用 MongoDB。项目结构清晰,适合学习和实践全栈开发。

项目源码地址链接:
todolist-express: 一个基于 Vue3 + TypeScript + Node.js + Express + MongoDB 的全栈 ToDoList 项目。

项目截图

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

一、后端技术栈与实现

1. 技术选型

  • Node.js:高性能的 JavaScript 运行环境,适合 I/O 密集型应用。
  • Express:简洁灵活的 Web 框架,便于快速搭建 RESTful API。
  • TypeScript:为 JavaScript 提供类型系统,提升代码可维护性和可读性。
  • Mongoose:MongoDB 的对象建模工具,简化数据库操作。

2. 目录结构

backend/
  ├── src/
  │   ├── app.ts         // Express 应用主入口
  │   ├── index.ts       // 启动服务
  │   ├── models/        // Mongoose 数据模型
  │   └── routes/        // 路由模块

3. 主要知识点

a) TypeScript 在后端的应用
  • 类型定义提升了开发效率,减少了运行时错误。
  • 接口(interface)用于定义数据结构,如 Todo、User。
import mongoose, { Schema, Document } from 'mongoose';

export interface ITodo extends Document {
  content: string;
  status: 'active' | 'completed' | 'deleted';
  priority: number;
  tags: string[];
  category: string;
  user: mongoose.Types.ObjectId;
  createdAt: Date;
  completedAt?: Date;
}
b) 路由与中间件
  • 路由模块化,routes/auth.ts 处理认证相关接口,routes/todo.ts 处理待办事项相关接口。
  • 使用中间件进行请求体解析、鉴权等操作。
// 获取所有 ToDo
router.get('/', auth, async (req: AuthRequest, res: Response) => {
  const todos = await Todo.find({ user: req.user.id, status: { $ne: 'deleted' } }).sort({ createdAt: -1 });
  res.json(todos);
});
c) Mongoose 数据建模
  • models/Todo.tsmodels/User.ts 定义了数据结构和约束。
  • 通过 Schema 约束字段类型、必填项、默认值等。
d) 用户认证
  • 通常采用 JWT(JSON Web Token)进行用户身份验证(可在 auth.ts 路由中实现)。
  • 注意密码加密存储(如 bcrypt),避免明文存储。
// 鉴权中间件
function auth(req: AuthRequest, res: Response, next: NextFunction) {
  const token = req.headers['authorization']?.split(' ')[1];
  if (!token) return res.status(401).json({ msg: '未登录' });
  try {
    const decoded = jwt.verify(token, JWT_SECRET);
    req.user = decoded;
    next();
  } catch {
    res.status(401).json({ msg: '无效token' });
  }
}
e) 错误处理
  • 统一的错误处理机制,保证接口返回一致的错误格式,便于前端处理。

  • Vue 3:响应式、组件化的前端框架。

  • TypeScript:提升代码可维护性。

  • Vite:新一代前端构建工具,极快的热更新体验。

  • Pinia/Vuex:状态管理。

二、前端技术栈与实现

2. 目录结构

frontend/
  ├── src/
  │   ├── api/           // 封装后端请求
  │   ├── components/    // 复用组件
  │   ├── store/         // 状态管理
  │   ├── views/         // 页面视图
  │   └── router/        // 路由配置

3. 主要知识点

a) 组件化开发
  • 复用性强,易于维护,如 TodoItem.vueTodoList.vue
  • 父子组件通信(props、emit)、兄弟组件通信(状态管理)。
b) 状态管理
  • store/todo.tsstore/user.ts 管理全局状态,避免多层组件传参。
  • 响应式数据驱动视图更新。
c) 路由管理
  • router/index.ts 配置页面路由,实现页面跳转与权限控制。
d) API 封装
  • api/request.ts 封装 axios/fetch,统一处理请求和响应。
  • api/todo.tsapi/user.ts 封装具体业务接口,便于维护。
e) 样式与动画
  • assets/animate.css 提供动画效果,提升用户体验。

三、项目运行以及MongoDB启动指南

项目运行

  1. 安装 Node.js、MongoDB
  2. 分别进入 backend、frontend 目录执行 npm install
  3. 启动 MongoDB 服务
  4. 启动后端:npm run dev
  5. 启动前端:npm run dev
  6. 访问前端页面(如 http://localhost:5173)

MongoDB启动指南

  • 访问 MongoDB 官方下载页面
  • 选择 Windows 平台,版本建议选择最新稳定版(如 6.0)
  • 下载 MSI 安装程序(64 位)

在mongodb官网安装mongodb后,启动命令行输入mongod,仍旧显示
在这里插入图片描述

打开电脑的高级系统设置,配置mongodb的环境变量,将mongodb的bin目录添加到环境变量中

在这里插入图片描述

启动mongodb服务的时候提示
在这里插入图片描述

可以通过在mongod/bin目录下cmd,输入mongod --dbpath D:\app\MongoDB\data启动数据库服务

数据库启动后,可以通过mongodb compass进行数据库连接

在这里插入图片描述

数据库启动并连接成功后,再运行服务端代码,服务端代码运行端如下图所示,则代表服务端代码成功运行

在这里插入图片描述

关注微信公众号温暖全栈,不定期分享前端知识点和前端资料↓↓↓

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

温暖全栈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值