gofiber-study/app/app.go

84 lines
1.8 KiB
Go
Raw Normal View History

2022-10-04 14:59:46 +08:00
package app
import (
"github.com/goccy/go-json"
"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/utils"
"gofiber.study.skcks.cn/controller"
2022-10-04 14:59:46 +08:00
"gofiber.study.skcks.cn/global"
)
2022-10-04 13:06:13 +08:00
var App *fiber.App
2022-10-04 16:17:04 +08:00
func Run() {
2022-10-04 14:59:46 +08:00
err := viper.Unmarshal(global.Config)
if err != nil {
logger.Log.Fatalf("配置文件解析失败: %s", err)
}
2022-10-04 03:24:13 +08:00
utils.MainAppExec(func() {
2022-10-05 14:47:07 +08:00
logger.Log.Debugf("\n%#v", global.Config)
2022-10-04 03:24:13 +08:00
})
2022-10-04 14:59:46 +08:00
reloadRedis(global.Config)
reloadDataSources(global.Config)
2022-10-04 14:59:46 +08:00
App = reloadApp(global.Config)
2022-10-04 14:59:46 +08:00
if err := App.Listen(global.Config.Server.Addr); err != nil {
2022-10-04 03:08:27 +08:00
logger.Log.Fatalf("[x] [Fiber] 致命错误: %s", err)
}
}
func reloadApp(c *config.BasicConfig) *fiber.App {
2022-10-04 13:06:13 +08:00
if App != nil {
_ = App.Shutdown()
}
app := fiber.New(fiber.Config{
JSONEncoder: json.Marshal,
JSONDecoder: json.Unmarshal,
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)
2022-10-04 14:59:46 +08:00
controller.RegisterController(app)
controller.HelloWorld(app)
controller.ErrorHandler(app)
app.Hooks().OnListen(func() error {
utils.MainAppExec(func() {
2022-10-04 03:24:13 +08:00
logger.Log.Infoln("[√] [服务启动完成]")
})
return nil
})
return app
}