package main import ( "github.com/gofiber/fiber/v2" "github.com/spf13/viper" "gofiber.study.skcks.cn/common/config" "gofiber.study.skcks.cn/common/errorx" "gofiber.study.skcks.cn/common/logger" "gofiber.study.skcks.cn/common/response" "gofiber.study.skcks.cn/controller" "gofiber.study.skcks.cn/global" "xorm.io/xorm" ) func loadApp() { err := viper.Unmarshal(global.Config) if err != nil { logger.Log.Fatalf("配置文件解析失败: %s", err) } logger.Log.Infof("\n%#v", global.Config) reloadDataSources(global.Config) app = reloadApp(global.Config) if err := app.Listen(global.Config.Server.Addr); err != nil { logger.Log.Fatalf("[服务] 致命错误: %s", err) } } func reloadDataSources(c *config.BasicConfig) { if global.DataSources != nil { _ = global.DataSources.Close() } connGroup, err := xorm.NewEngineGroup("mysql", c.Mysql.DataSources) if err != nil { logger.Log.Fatalf("[x] [数据源] 致命错误: %s", err) } logger.Log.Infoln("[√] [初始化数据源]") global.DataSources = connGroup if c.Mysql.AutoSync { global.SyncModelToDataSource() } } func reloadApp(c *config.BasicConfig) *fiber.App { if app != nil { _ = app.Shutdown() } app := fiber.New(fiber.Config{ Prefork: c.Server.PreFork, CaseSensitive: c.Server.CaseSensitive, StrictRouting: c.Server.StrictRouting, ServerHeader: c.Server.ServerHeader, ErrorHandler: func(ctx *fiber.Ctx, err error) error { code := fiber.StatusInternalServerError if e, ok := err.(*fiber.Error); ok { code = e.Code } err = ctx.Status(code).JSON(errorx.NewDefaultError(err.Error())) if err != nil { return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error") } return nil }, }) if c.Server.EnableRoutesMsg { routes(app) } controller.SwaggerHandler(app) controller.HelloWorld(app) controller.ErrorHandler(app) app.Hooks().OnListen(func() error { logger.Log.Infoln("[√] [服务启动完成]") return nil }) return app } // routes // @Summary 获取所有路由 // @Description 获取所有路由信息 // @Tags Routes // @Accept json // @Produce json // @Success 200 {object} response.Response(Data=[][]fiber.Route) // @Router /routes [get] func routes(app *fiber.App) { app.Get("/routes", func(ctx *fiber.Ctx) error { return ctx.JSON(response.NewResponse(app.Stack())) }) }