This repository has been archived on 2026-04-05. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
Exam_registration/cmd/main.go
2026-03-20 22:26:01 +08:00

71 lines
1.9 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package main
import (
"exam_registration/internal/dao"
"exam_registration/internal/middleware"
"exam_registration/internal/routes"
"exam_registration/pkg/config"
"fmt"
"github.com/gin-gonic/gin"
"log"
"net/http"
"os"
)
func main() {
// 加载配置
if err := config.Init("config/config.yaml"); err != nil {
log.Fatalf("Failed to load config: %v", err)
}
// 初始化数据库
if err := dao.InitMySQL(config.Config); err != nil {
log.Fatalf("Failed to init database: %v", err)
}
// 创建 Gin 引擎
r := gin.Default()
// 全局中间件
r.Use(middleware.Cors())
// 设置路由(必须在静态文件服务之前)
routes.SetupRouter(r)
// 静态文件服务和前端路由回退处理
distPath := "frontend/dist"
if _, err := os.Stat(distPath); err == nil {
// dist 目录存在,提供静态文件服务
// 使用 StaticFS 直接映射根路径到 dist 目录
r.StaticFS("/static", http.Dir(distPath+"/static"))
// 显式处理根路径 - 返回 index.html
r.GET("/", func(c *gin.Context) {
c.File(distPath + "/index.html")
})
// 前端路由回退处理SPA 支持)- 放在最后
r.NoRoute(func(c *gin.Context) {
// API 路由未找到,返回 404
if len(c.Request.URL.Path) >= 4 && c.Request.URL.Path[:4] == "/api" {
c.JSON(http.StatusNotFound, gin.H{"error": "API not found"})
return
}
// 其他路由,返回前端 index.html由 vue-router 处理)
c.File(distPath + "/index.html")
})
} else {
// dist 目录不存在,提示需要构建前端
fmt.Println("⚠️ Frontend dist directory not found. Please build frontend first.")
fmt.Println(" Run: cd frontend && npm install && npm run build")
}
// 启动服务器
port := config.Config.GetString("server.port")
if err := r.Run(":" + port); err != nil {
log.Fatalf("Failed to start server: %v", err)
}
fmt.Printf("Server started on port %s\n", port)
}