Files
yunzerwebsiteallinone/go/routers/router.go
T
2026-07-16 00:35:50 +08:00

76 lines
2.2 KiB
Go

package routers
import (
"os"
"server/middleware"
"server/routers/api"
"server/routers/app"
"server/routers/backend"
"server/routers/index"
"server/routers/platform"
beego "github.com/beego/beego/v2/server/web"
"github.com/beego/beego/v2/server/web/context"
)
// 初始化路由(精简版)
func init() {
// 全局 CORS 处理 + 预检请求
// 注意:Allow-Origin 为 * 时不能同时设置 Allow-Credentials: true,否则浏览器会拒绝带 Authorization 的预检(上传/接口跨域常见现象)。
// 当前 JWT 走 Header、前端 axios withCredentials=false,无需携带 Cookie,故不返回 Allow-Credentials。
beego.InsertFilter("*", beego.BeforeRouter, func(ctx *context.Context) {
ctx.Output.Header("Access-Control-Allow-Origin", "*")
ctx.Output.Header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, PATCH, OPTIONS")
ctx.Output.Header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization")
ctx.Output.Header("Access-Control-Max-Age", "86400")
if ctx.Input.Method() == "OPTIONS" {
ctx.Output.Status = 200
ctx.Output.Body([]byte(""))
return
}
})
// 全局操作日志:请求开始采集并异步写入
beego.InsertFilter("*", beego.BeforeRouter, middleware.BeginOperationLog)
// 根据运行模式选择要注册的路由组
// 优先读取环境变量 APP_MODE,其次读取配置 app_mode,默认 all
mode := os.Getenv("APP_MODE")
if mode == "" {
mode, _ = beego.AppConfig.String("app_mode")
}
if mode == "" {
mode = "all"
}
switch mode {
case "platform":
platform.Register()
app.Register()
// 在 platform 模式下,仍保留 backend 登录相关路由,避免后台登录 404
backend.RegisterAuthRoutes()
case "backend":
backend.Register()
app.Register()
case "index":
index.Register()
app.Register()
case "api":
api.Register()
case "app":
app.Register()
case "all":
platform.Register()
backend.Register()
index.Register()
api.Register()
app.Register()
default:
// 未知模式时,退回到只启用平台端,避免启动失败
platform.Register()
app.Register()
}
}