基于 NestJS的博客系统服务端
2025年8月22日
15分钟阅读
2 次浏览
0 条评论
一个基于 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 - 阅读时间计算
📁 项目结构
sh1src/ 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
安装依赖
bash1# 克隆项目
2git clone https://github.com/IgnorantCircle/igcircle-blog-server
3cd igcircle-blog-server
4
5# 安装依赖
6pnpm install
环境配置
- 复制环境配置文件:
bash1cp .env.development.local.example .env.development.local
- 修改
.env.development.local
配置:
env1# 应用配置
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(推荐)
bash1# 启动 MySQL 容器
2docker-compose up -d mysql
手动安装
- 安装 MySQL 8.0
- 创建数据库:
运行应用
bash1# 开发模式
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 进行代码规范化:
bash1# 代码检查
2pnpm run lint
3
4# 代码格式化
5pnpm run format
测试
bash1# 单元测试
2pnpm run test
3
4# 测试覆盖率
5pnpm run test:cov
6
7# E2E 测试
8pnpm run test:e2e
构建部署
bash1# 构建项目
2pnpm run build
3
4# 生产环境运行
5pnpm run start:prod
🔒 安全特性
- 密码加密:使用 bcrypt 进行密码哈希
- JWT 认证:安全的 Token 认证机制
- CORS 配置:跨域请求安全控制
- 请求验证:严格的输入数据验证
- SQL 注入防护:TypeORM 参数化查询
- XSS 防护:输入数据清理和转义
- 限流处理:防止暴力攻击
📊 性能优化
- 数据库索引:关键字段建立索引
- 查询优化:使用 QueryBuilder 优化复杂查询
- 缓存策略: 缓存热点数据
- 分页查询:避免大量数据查询
- 懒加载:按需加载关联数据
- 连接池:数据库连接池管理
🚀 部署指南
Docker 部署
bash1# 构建镜像
2docker build -t igcircle-blog-server .
3
4# 运行容器
5docker run -p 7001:7001 igcircle-blog-server
PM2 部署
bash1# 安装 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 条登录后即可参与评论讨论
加载评论中...
相关文章
目录