1.0
This commit is contained in:
@@ -0,0 +1,142 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"awesomeProject/internal/common"
|
||||
"awesomeProject/internal/events"
|
||||
"awesomeProject/internal/handlers"
|
||||
"awesomeProject/internal/models"
|
||||
"awesomeProject/internal/routers"
|
||||
"awesomeProject/internal/tasks"
|
||||
"fmt"
|
||||
"github.com/gin-gonic/gin"
|
||||
"log"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// 1. 加载配置文件
|
||||
config, err := common.LoadConfig("./configs/config.yaml")
|
||||
if err != nil {
|
||||
log.Fatalf("加载配置文件失败: %v", err)
|
||||
}
|
||||
log.Printf("配置加载成功: %s v%s", config.App.Name, config.App.Version)
|
||||
|
||||
// 2. 初始化数据库
|
||||
if err := common.InitDatabase(&config.Database); err != nil {
|
||||
log.Fatalf("数据库初始化失败: %v", err)
|
||||
}
|
||||
defer func() {
|
||||
err := common.CloseDatabase()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}()
|
||||
|
||||
// 4. 自动迁移数据表
|
||||
if err := models.AutoMigrateAll(); err != nil {
|
||||
log.Fatalf("数据表迁移失败: %v", err)
|
||||
}
|
||||
log.Println("数据表迁移完成")
|
||||
|
||||
// 5. 初始化系统配置
|
||||
//configHandler := &handlers.AdminConfigHandler{}
|
||||
//if err := configHandler.InitSystemConfigs(); err != nil {
|
||||
// log.Fatalf("初始化系统配置失败: %v", err)
|
||||
//}
|
||||
//log.Println("系统配置初始化完成")
|
||||
|
||||
// 6. 初始化事件系统
|
||||
events.InitEventSystem()
|
||||
|
||||
// 7. 初始化定时任务
|
||||
tasks.InitCronTasks()
|
||||
log.Println("定时任务初始化完成")
|
||||
|
||||
// 8. 初始化默认用户
|
||||
initHandler := &handlers.InitHandler{}
|
||||
if err := initHandler.InitAll(); err != nil {
|
||||
log.Fatalf("初始化默认用户失败: %v", err)
|
||||
}
|
||||
log.Println("默认用户初始化完成")
|
||||
|
||||
// 9. 设置 Gin 模式
|
||||
if config.App.Env == "production" {
|
||||
gin.SetMode(gin.ReleaseMode)
|
||||
}
|
||||
|
||||
// 10. 创建Gin路由器和设置路由
|
||||
router := routers.SetupRouter()
|
||||
|
||||
// 配置静态资源
|
||||
// 上传文件的静态资源(允许缓存)
|
||||
router.Static("/back/file", "./public/file")
|
||||
|
||||
// H5 静态资源
|
||||
router.Static("/h5/static", "./public/h5/static")
|
||||
router.Static("/h5/assets", "./public/h5/assets")
|
||||
|
||||
// Vue 静态资源(禁用缓存)
|
||||
webGroup := router.Group("/")
|
||||
webGroup.Use(func(c *gin.Context) {
|
||||
// 只对web静态资源禁用缓存
|
||||
if strings.HasPrefix(c.Request.URL.Path, "/assets") ||
|
||||
strings.HasPrefix(c.Request.URL.Path, "/css") ||
|
||||
strings.HasPrefix(c.Request.URL.Path, "/js") {
|
||||
c.Header("Cache-Control", "no-cache, no-store, must-revalidate")
|
||||
c.Header("Pragma", "no-cache")
|
||||
c.Header("Expires", "0")
|
||||
}
|
||||
c.Next()
|
||||
})
|
||||
webGroup.Static("/assets", "./public/web/assets")
|
||||
webGroup.Static("/css", "./public/web/css")
|
||||
webGroup.Static("/js", "./public/web/js")
|
||||
|
||||
// H5 History 路由支持 - /h5 开头的路由返回 H5 的 index.html
|
||||
router.NoRoute(func(c *gin.Context) {
|
||||
path := c.Request.URL.Path
|
||||
|
||||
// 如果是 API 请求(/back 开头),返回 404
|
||||
if strings.HasPrefix(path, "/back") {
|
||||
c.JSON(404, gin.H{"error": "API not found"})
|
||||
return
|
||||
}
|
||||
|
||||
// H5 路由处理
|
||||
if strings.HasPrefix(path, "/h5") {
|
||||
// 检查是否是静态文件(包含文件扩展名)
|
||||
if strings.Contains(path, ".") {
|
||||
// 静态文件应该已经被上面的 Static 路由处理了
|
||||
// 如果到这里说明文件不存在,返回 404
|
||||
c.JSON(404, gin.H{"error": "File not found"})
|
||||
return
|
||||
}
|
||||
// H5 路由返回 H5 的 index.html
|
||||
c.File("./public/h5/index.html")
|
||||
return
|
||||
}
|
||||
|
||||
// 检查是否是静态文件(包含文件扩展名)
|
||||
if strings.Contains(path, ".") {
|
||||
// 设置禁用缓存的响应头
|
||||
c.Header("Cache-Control", "no-cache, no-store, must-revalidate")
|
||||
c.Header("Pragma", "no-cache")
|
||||
c.Header("Expires", "0")
|
||||
|
||||
// 尝试访问 web 目录下的文件
|
||||
c.File("./public/web" + path)
|
||||
return
|
||||
}
|
||||
|
||||
// 其他路由返回 Vue 应用
|
||||
c.File("./public/web/index.html")
|
||||
})
|
||||
|
||||
// 启动服务器
|
||||
port := fmt.Sprintf(":%d", config.App.Port)
|
||||
log.Printf("服务器启动在端口 %s", port)
|
||||
if err := router.Run(port); err != nil {
|
||||
log.Fatalf("服务器启动失败: %v", err)
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user