igCircle Blog

基于 NestJS的博客系统服务端

2025年8月22日

15分钟阅读

2 次浏览

0 条评论

项目

标签

node博客系统项目后端

一个基于 NestJS 构建的博客系统后端服务,提供完整的博客管理功能和 RESTful API,使用Swagger自动生成API文档。

igCircle Blog Server

一个基于 NestJS 构建的博客系统后端服务,提供完整的博客管理功能和 RESTful API。 GitHub地址

🚀 项目特性

核心功能

  • 用户管理系统:用户注册、登录、权限管理、邮箱验证
  • 文章管理:文章的创建、编辑、发布、归档、批量操作
  • Markdown自动解析:自动解析Markdown数据,使用 gray-matter 解析 frontmatter
  • 分类标签:文章分类和标签管理
  • 评论系统:支持多级评论、点赞、管理员审核
  • 搜索功能:全文搜索、分类搜索、标签搜索
  • 统计分析:文章浏览量、点赞数、评论数等统计
  • 文件上传:支持markdown、图片等文件上传
  • 邮件服务:验证码发送、密码重置等

技术特性

  • 现代化架构:基于 NestJS 框架,采用模块化设计
  • 数据库支持:MySQL 数据库,TypeORM 作为 ORM
  • 身份认证:JWT Token 认证,支持多设备登录管理
  • 缓存系统: 设置缓存提升性能
  • 日志系统:结构化日志记录,支持文件和控制台输出
  • API 文档:集成 Swagger 自动生成 API 文档
  • 数据验证:使用 class-validator 进行数据验证
  • 错误处理:统一的异常处理和错误响应
  • 安全防护:CORS 配置、请求频率限制、密码加密

🛠 技术栈

后端框架

  • NestJS - 渐进式 Node.js 框架
  • TypeScript - 类型安全的 JavaScript 超集

数据库

  • MySQL 8.0 - 关系型数据库
  • TypeORM - TypeScript ORM 框架
  • nestjs-cache-manager - 缓存数据库

身份认证

  • JWT - JSON Web Token 认证
  • bcrypt - 密码加密

工具库

  • class-validator - 数据验证
  • class-transformer - 数据转换
  • Swagger - API 文档生成
  • nodemailer - 邮件发送
  • multer - 文件上传
  • gray-matter - Markdown 文件解析
  • reading-time - 阅读时间计算

📁 项目结构

sh
1src/
2├── app.module.ts              # 应用主模块
3├── main.ts                    # 应用入口文件
4├── common/                    # 通用模块
5│   ├── base/                  # 基础服务类
6│   ├── cache/                 # 缓存服务
7│   ├── config/                # 配置管理
8│   ├── decorators/            # 自定义装饰器
9│   ├── exceptions/            # 异常处理
10│   ├── filters/               # 异常过滤器
11│   ├── interceptors/          # 拦截器
12│   ├── logger/                # 日志服务
13│   ├── middleware/            # 中间件
14│   ├── pipes/                 # 管道
15│   └── utils/                 # 工具函数
16├── config/                    # 配置文件
17│   ├── database.config.ts     # 数据库配置
18│   └── jwt.config.ts          # JWT 配置
19├── controllers/               # 控制器
20│   ├── admin/                 # 管理员接口
21│   ├── public/                # 公共接口
22│   ├── user/                  # 用户接口
23│   └── *.controller.ts        # 其他控制器
24├── dto/                       # 数据传输对象
25├── entities/                  # 数据库实体
26├── enums/                     # 枚举定义
27├── guards/                    # 守卫
28├── modules/                   # 功能模块
29└── services/                  # 业务服务
30    ├── article/               # 文章相关服务
31    ├── common/                # 通用服务
32    └── *.service.ts           # 其他服务

🚀 快速开始

环境要求

  • Node.js >= 16.0.0
  • MySQL >= 8.0
  • pnpm >= 7.0.0

安装依赖

bash
1# 克隆项目
2git clone https://github.com/IgnorantCircle/igcircle-blog-server
3cd igcircle-blog-server
4
5# 安装依赖
6pnpm install

环境配置

  1. 复制环境配置文件:
bash
1cp .env.development.local.example .env.development.local
  1. 修改 .env.development.local 配置:
env
1# 应用配置
2PORT=7001
3NODE_ENV=development
4
5# 数据库配置
6DB_HOST=
7DB_PORT=3306
8DB_USER=root
9DB_PASS=your_password
10DB_NAME=your_db_name
11DB_SYNCHRONIZE=false
12DB_LOGGING=true
13
14# JWT配置
15JWT_SECRET=your_jwt_secret_key
16JWT_EXPIRES_IN=7d
17
18# 邮件服务配置
19MAIL_HOST=your_mail_host
20MAIL_PORT=465
21MAIL_USER=your_email@163.com
22MAIL_PASS=your_email_password
23MAIL_SECURE=true
24
25# 其他配置...

数据库设置

使用 Docker(推荐)

bash
1# 启动 MySQL 容器
2docker-compose up -d mysql

手动安装

  1. 安装 MySQL 8.0
  2. 创建数据库:

运行应用

bash
1# 开发模式
2pnpm run start:dev
3
4# 生产模式
5pnpm run build
6pnpm run start:prod

应用将在 http://localhost:7001 启动。

📚 API 文档

启动应用后,访问 http://localhost:7001/api-docs 查看完整的 Swagger API 文档。

🔧 开发指南

代码规范

项目使用 ESLint 和 Prettier 进行代码规范化:

bash
1# 代码检查
2pnpm run lint
3
4# 代码格式化
5pnpm run format

测试

bash
1# 单元测试
2pnpm run test
3
4# 测试覆盖率
5pnpm run test:cov
6
7# E2E 测试
8pnpm run test:e2e

构建部署

bash
1# 构建项目
2pnpm run build
3
4# 生产环境运行
5pnpm run start:prod

🔒 安全特性

  • 密码加密:使用 bcrypt 进行密码哈希
  • JWT 认证:安全的 Token 认证机制
  • CORS 配置:跨域请求安全控制
  • 请求验证:严格的输入数据验证
  • SQL 注入防护:TypeORM 参数化查询
  • XSS 防护:输入数据清理和转义
  • 限流处理:防止暴力攻击

📊 性能优化

  • 数据库索引:关键字段建立索引
  • 查询优化:使用 QueryBuilder 优化复杂查询
  • 缓存策略: 缓存热点数据
  • 分页查询:避免大量数据查询
  • 懒加载:按需加载关联数据
  • 连接池:数据库连接池管理

🚀 部署指南

Docker 部署

bash
1# 构建镜像
2docker build -t igcircle-blog-server .
3
4# 运行容器
5docker run -p 7001:7001 igcircle-blog-server

PM2 部署

bash
1# 安装 PM2
2npm install -g pm2
3
4# 启动应用
5pm2 start dist/main.js --name "blog-server"
6
7# 查看状态
8pm2 status
9
10# 查看日志
11pm2 logs blog-server

喜欢这篇文章吗?

加载中...

评论

0

登录后即可参与评论讨论

加载评论中...

相关文章

基于Next的博客用户端设计

一个基于 Next.js 15 和 Chakra UI 构建的博客前端应用,供了文章浏览、搜索、分类、标签、用户认证等完整的博客功能,支持服务端渲染(SSR)、响应式设计和暗黑模式,拥有良好的SEO。

项目
博客系统React项目

2025-08-22

2

0

目录