技术栈:
前端:Next.js (React)、Tailwind CSS (样式)
后端:Node.js + Express
数据库:MongoDB (或替代为 SQLite 等)
认证:JWT (JSON Web Tokens)
部署:Vercel (或 Heroku、Docker 等)
项目目标:
-
独立搭建前后端分离架构
-
实现用户注册、登录、权限控制
-
支持文章增删改查 (CRUD) 操作
-
数据库持久化存储数据
-
部署至线上环境
项目结构:
my-blog-system/
├── frontend/ # Next.js 前端项目
│ ├── pages/ # Next.js 路由页面
│ ├── components/ # 可复用组件
│ ├── styles/ # Tailwind CSS 样式
│ └── ... # 其他配置
└── backend/ # Node.js + Express 后端项目
├── routes/ # API 路由 (用户、文章等)
├── models/ # 数据库模型 (Mongoose)
├── middlewares/ # 中间件 (认证、错误处理)
├── config/ # 数据库配置、JWT密钥等
└── app.js # 入口文件
分步骤实现指南:
一、环境准备
-
安装 Node.js (v18+)
-
安装 MongoDB 并启动服务(或创建本地数据库)
-
克隆项目仓库(或手动创建上述目录结构)
二、后端开发(Node.js + Express)
-
进入
backend/目录,初始化项目:npm init -y -
安装依赖:
npm install express mongoose cors dotenv bcryptjs jsonwebtoken -
配置数据库连接:
在 backend/config/db.js 中填入 MongoDB 连接串(如 mongodb://localhost:27017/blog)
使用 mongoose 连接数据库
- 设计用户模型:
在 backend/models/User.js 定义用户 Schema(含用户名、密码哈希、JWT生成方法)
- 实现用户认证路由:
注册:POST /api/users/register(验证输入,加密密码后存库)
登录:POST /api/users/login(验证凭据,返回 JWT)
保护路由中间件:useAuth.js(使用 jsonwebtoken 验证 Authorization Header)
- 实现文章路由(CRUD):○
创建文章:POST /api/posts(需要认证)
获取文章列表:GET /api/posts(分页)
获取单篇文章:GET /api/posts/:id
更新/删除文章:PUT /DELETE /api/posts/:id(仅作者可操作)
- 启动后端服务:
node app.js(监听端口 5000)
三、前端开发(Next.js)
-
进入
frontend/目录,创建 Next.js 项目:npx create-next-app --ts -
安装 Tailwind CSS:
npm install -D tailwindcss postcss autoprefixer -
配置 Tailwind 并创建基本布局(如 Header、Footer、Auth 弹窗)
-
实现用户认证页面:
注册页:/register(表单 + 提交到后端 API)
登录页:/login(处理 JWT 存储至本地)
使用 useContext + useState 管理用户状态
- 实现文章管理功能:
列表页:/posts(获取后端数据,分页展示)
创建页:/posts/new(表单 + 富文本编辑器如 react-quill)
详情页:/posts/[id](动态路由,显示单篇文章)
编辑/删除:在详情页添加操作按钮(需验证用户权限)
-
使用
axios或fetch调用后端 API,处理请求/响应 -
部署前配置环境变量(如
NEXT_PUBLIC_API_URL=http://localhost:5000)
四、集成与测试
-
启动后端:
cd backend && npm start -
启动前端:
cd frontend && npm run dev -
测试流程:
注册新用户 → 登录 → 创建文章 → 查看/编辑/删除文章
注销后无法访问保护路由(需重定向至登录页)
- 使用 Postman 测试后端 API 是否正常工作
五、部署到生产环境
- 后端部署(可选):
使用 Heroku:创建应用,配置 Procfile(web: node app.js),部署代码
或使用 Docker 容器化部署
- 前端部署(Vercel):
在 Vercel 导入 frontend 项目
配置环境变量(如 API_URL 指向后端部署地址)
- 配置反向代理(若前后端分离部署),解决跨域问题
六、扩展与优化方向
- 性能优化:
后端添加缓存层(如 Redis)
前端使用 Next.js 的 ISR(增量静态再生)优化 SEO
- 用户体验:
添加实时编辑(如使用 WebSocket 同步文章更新)
集成 Markdown 编辑器替代富文本
- 安全增强:
实现密码强度校验、用户激活邮件
添加 Rate Limit 防止暴力破解
学习建议:
-
先专注实现核心功能(用户认证、文章CRUD),再逐步扩展高级特性
-
阅读官方文档:Next.js、Express、Mongoose、JWT
-
调试技巧:使用 Postman 测试 API,前端控制台查看网络请求
-
参考开源项目:如
https://github.com/vercel/next.js/tree/canary/examples中的全栈示例
资源推荐:
Next.js 全栈教程:https://nextjs.org/learn/basics/data-fetching
Mongoose 文档:https://mongoosejs.com/docs/guide.html
JWT 认证实战:https://www.digitalocean.com/community/tutorials/nodejs-authorization-jwt
注意事项:
数据库操作需处理错误(如用户已存在、文章不存在)
生产环境务必隐藏密钥(使用环境变量,不提交到 Git)
部署后测试所有权限控制是否生效
开始实践 : 按照以上步骤,从零搭建项目,理解每个模块的作用和通信流程。重点学习前后端如何协作(API 设计、数据验证、状态管理)以及全栈思维(从数据库到用户界面)。完成项目后,你将具备独立交付全栈应用的能力,为简历增添实战经验!