# 网址速藏 **Repository Path**: Sckaro/website-su ## Basic Information - **Project Name**: 网址速藏 - **Description**: Golang项目--基于个人小需求的网址网站 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-03 - **Last Updated**: 2025-11-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 网址速藏系统 这是一个基于Go语言、Gin框架和GORM的现代化网址收藏系统,采用MVC三层架构设计,支持用户认证、分类管理、网址收藏以及完整的API文档。 ## 项目特点 - ✅ 用户注册/登录功能 - ✅ 密码加密存储(bcrypt) - ✅ JWT令牌认证系统 - ✅ 中间件拦截器(认证、CORS、日志) - ✅ 多级分类管理 - ✅ 分类增删改查与树形结构展示 - ✅ 分类分页查询与模糊搜索 - ✅ 网址收藏管理 - ✅ 网址预览功能(自动获取标题和图标) - ✅ 批量操作收藏(删除、移动) - ✅ 收藏分类关联与访问次数统计 - ✅ 后台管理系统(用户、分类、书签管理) - ✅ Swagger API文档自动生成 - ✅ 数据库自动迁移 - ✅ 统一的响应格式 - ✅ MVC三层架构 ## 技术栈 - **后端**: Go 1.21+ + Gin框架 - **ORM**: GORM v1.25.5 - **数据库**: MySQL 8.0+ - **认证**: JWT tokens with HS256 algorithm - **API文档**: Swagger (Swaggo) - **密码加密**: bcrypt - **前端**: HTML/CSS/JavaScript (static files in `web/`) ## 项目结构 ``` bookmark-web/ ├── controller/ # 控制器层 - 处理HTTP请求 │ ├── admin_controller.go # 后台管理控制器 │ ├── category_controller.go # 分类控制器 │ └── user_controller.go # 用户控制器 ├── dao/ # 数据访问层 - 数据库操作 │ ├── bookmark_dao.go # 书签数据访问 │ ├── category_dao.go # 分类数据访问 │ ├── mysql.go # 数据库连接配置 │ └── user_dao.go # 用户数据访问 ├── logic/ # 业务逻辑层 - 处理业务逻辑 │ ├── bookmark_logic.go # 书签业务逻辑 │ ├── category_logic.go # 分类业务逻辑 │ └── user_logic.go # 用户业务逻辑 ├── models/ # 模型层 - 数据结构定义 │ ├── bookmark.go # 书签模型 │ ├── category.go # 分类模型 │ └── user.go # 用户模型 ├── routers/ # 路由层 - 路由配置 │ └── router.go # 路由定义 ├── middleware/ # 中间件层 - 全局中间件 │ └── auth.go # 认证中间件 ├── utils/ # 工具类 - 通用工具函数 │ ├── jwt.go # JWT工具 │ ├── password.go # 密码工具 │ ├── response.go # 响应工具 │ └── ... ├── web/ # 前端静态文件 │ ├── index.html │ ├── bookmark.html │ ├── category.html │ └── ... ├── templates/ # HTML模板(备用) │ ├── index.html │ ├── login.html │ └── register.html ├── docs/ # Swagger文档目录 │ ├── docs.go │ ├── swagger.json │ └── swagger.yaml ├── main.go # 程序入口 ├── go.mod # Go模块文件 ├── go.sum # 依赖锁定文件 └── README.md # 项目文档 ``` ## 快速开始 ### 1. 环境准备 - Go 1.21+ - MySQL 8.0+ ### 2. 数据库设置 #### 方式1: 自动初始化(推荐) 数据库将在程序启动时自动创建和迁移表结构,无需手动执行SQL脚本。 #### 方式2: 手动创建数据库 ```bash # 创建数据库 mysql -u root -p -e "CREATE DATABASE website CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" ``` ### 3. 配置数据库连接 编辑 `dao/mysql.go` 文件中的数据库连接信息: ```go const ( UserName = "root" // 数据库用户名 Password = "123456" // 数据库密码 Host = "127.0.0.1" // 数据库地址 Port = "3306" // 数据库端口 DBName = "website" // 数据库名 ) ``` ### 4. 安装依赖 ```bash go mod tidy ``` ### 5. 生成Swagger文档 ```bash # 安装Swaggo工具 go install github.com/swaggo/swag/cmd/swag@latest # 生成文档 swag init --parseDependency --parseInternal --g controller/user_controller.go ``` ### 6. 运行项目 ```bash # 直接运行 go run main.go # 构建可执行文件 go build ./bookmark-web.exe # Windows ./bookmark-web # Linux/Mac ``` 服务器将启动在 http://localhost:9080 ### 7. 访问应用 - **前端应用**: http://localhost:9080 - **Swagger API文档**: http://localhost:9080/swagger/index.html - **API前缀**: /api ## 核心功能 ### 用户认证 - **注册**: `POST /api/user/register` - **登录**: `POST /api/user/login` ### 分类管理 - **创建分类**: `POST /api/category` - **获取分类列表**: `GET /api/category` - **获取分类树**: `GET /api/category/tree` - **获取单个分类**: `GET /api/category/:id` - **更新分类**: `PUT /api/category/:id` - **删除分类**: `DELETE /api/category/:id` - **搜索分类**: `GET /api/category/search` ### 书签管理 - **创建书签**: `POST /api/bookmark` - **获取书签列表**: `GET /api/bookmark` - **获取单个书签**: `GET /api/bookmark/:id` - **根据分类获取书签**: `GET /api/bookmark/category/:categoryId` - **更新书签**: `PUT /api/bookmark/:id` - **删除书签**: `DELETE /api/bookmark/:id` - **批量操作**: `POST /api/bookmark/batch` - **获取网址预览**: `GET /api/bookmark/preview` - **记录访问**: `POST /api/bookmark/:id/visit` ### 后台管理(管理员权限) - **用户管理**: - 获取所有用户: `GET /api/admin/users` - 获取用户: `GET /api/admin/users/:id` - 创建用户: `POST /api/admin/users` - 更新用户: `PUT /api/admin/users/:id` - 删除用户(级联删除): `DELETE /api/admin/users/:id` - 切换管理员身份: `PUT /api/admin/users/:id/admin` - **分类管理**: - 获取所有分类: `GET /api/admin/categories` - 获取分类: `GET /api/admin/categories/:id` - 删除分类: `DELETE /api/admin/categories/:id` - **书签管理**: - 获取所有书签: `GET /api/admin/bookmarks` - 获取书签: `GET /api/admin/bookmarks/:id` - 删除书签: `DELETE /api/admin/bookmarks/:id` - 根据用户获取书签: `GET /api/admin/bookmarks/user/:userId` ## Swagger API文档 访问 http://localhost:9080/swagger/index.html 即可查看完整的API文档,支持在线测试API接口。 ## JWT认证系统 ### 认证流程 1. **用户登录**:POST `/api/user/login` 获取JWT令牌 2. **携带令牌**:在请求头中添加 `Authorization: Bearer ` 3. **自动验证**:中间件自动验证令牌有效性 4. **获取用户信息**:从令牌中提取用户ID和用户名 ### 令牌配置 - **密钥**: `bookmark-web-secret-key-2024` - **过期时间**: 7天 - **签名算法**: HS256 ### 受保护的路由 - 所有分类相关API (`/api/category/*`) - 所有书签相关API (`/api/bookmark/*`) - 所有后台管理API (`/api/admin/*`) ## 数据库设计 ### users表结构 | 字段 | 类型 | 说明 | |------|------|------| | id | uint | 主键,自增 | | username | VARCHAR(50) | 用户名,唯一 | | password | VARCHAR(255) | 密码(加密) | | email | VARCHAR(100) | 邮箱,唯一 | | is_admin | bool | 是否为管理员 | | created_at | time.Time | 创建时间 | | updated_at | time.Time | 更新时间 | ### categories表结构 | 字段 | 类型 | 说明 | |------|------|------| | id | uint | 主键,自增 | | name | VARCHAR(100) | 分类名称 | | parent_id | uint | 父分类ID | | level | int | 分类层级 | | path | VARCHAR(500) | 分类路径 | | user_id | uint | 用户ID | | created_at | time.Time | 创建时间 | | updated_at | time.Time | 更新时间 | ### bookmarks表结构 | 字段 | 类型 | 说明 | |------|------|------| | id | uint | 主键,自增 | | url | TEXT | 网址 | | title | VARCHAR(255) | 网址标题 | | description | TEXT | 网址描述 | | favicon | VARCHAR(500) | 网站图标URL | | category_id | uint | 分类ID | | user_id | uint | 用户ID | | visit_count | int | 访问次数 | | created_at | time.Time | 创建时间 | | updated_at | time.Time | 更新时间 | ## 常见问题 ### 1. 数据库连接失败 - 检查MySQL服务是否启动 - 确认数据库连接信息是否正确 - 确认数据库是否已创建 - 检查网络连接 ### 2. Swagger文档生成失败 确保已正确安装Swaggo工具并在项目根目录执行命令。 ### 3. 端口被占用 修改main.go中的端口号: ```go r.Run(":9081") // 改为其他端口 ``` ## 开发说明 ### API响应格式 所有API响应都遵循统一格式: ```json { "code": 200, "message": "操作成功", "data": {...} } ``` ### 中间件 - **CORS Middleware**: 处理跨-origin请求 - **Logger Middleware**: 记录所有HTTP请求 - **JWT Auth Middleware**: 验证JWT令牌 - **Admin Auth Middleware**: 验证管理员权限 ### 数据库迁移 数据库表结构将在服务器启动时自动迁移,无需手动执行SQL脚本。 ## 许可证 MIT License