2022-10-04 14:59:46 +08:00
|
|
|
package app
|
2022-10-04 00:24:41 +08:00
|
|
|
|
|
|
|
import (
|
2022-10-04 16:50:14 +08:00
|
|
|
"github.com/goccy/go-json"
|
2022-10-04 00:24:41 +08:00
|
|
|
"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"
|
2022-10-05 16:02:09 +08:00
|
|
|
"gofiber.study.skcks.cn/common/utils"
|
2022-10-04 00:24:41 +08:00
|
|
|
"gofiber.study.skcks.cn/controller"
|
2022-10-04 14:59:46 +08:00
|
|
|
"gofiber.study.skcks.cn/global"
|
2022-10-06 17:58:11 +08:00
|
|
|
"gofiber.study.skcks.cn/services"
|
2022-10-04 00:24:41 +08:00
|
|
|
)
|
|
|
|
|
2022-10-04 16:17:04 +08:00
|
|
|
func Run() {
|
2022-10-04 14:59:46 +08:00
|
|
|
err := viper.Unmarshal(global.Config)
|
2022-10-04 00:24:41 +08:00
|
|
|
if err != nil {
|
|
|
|
logger.Log.Fatalf("配置文件解析失败: %s", err)
|
|
|
|
}
|
2022-10-04 03:24:13 +08:00
|
|
|
|
2022-10-05 16:02:09 +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 00:24:41 +08:00
|
|
|
|
2022-10-04 14:59:46 +08:00
|
|
|
reloadRedis(global.Config)
|
|
|
|
reloadDataSources(global.Config)
|
2022-10-05 23:32:33 +08:00
|
|
|
reloadJwt(global.Config)
|
2022-10-06 20:46:17 +08:00
|
|
|
reloadSonyFlake(global.Config)
|
|
|
|
reloadNanoId(global.Config)
|
2022-10-04 00:24:41 +08:00
|
|
|
|
2022-10-06 16:41:32 +08:00
|
|
|
global.App = reloadApp(global.Config)
|
2022-10-04 00:24:41 +08:00
|
|
|
|
2022-10-06 16:41:32 +08:00
|
|
|
if err := global.App.Listen(global.Config.Server.Addr); err != nil {
|
2022-10-04 03:08:27 +08:00
|
|
|
logger.Log.Fatalf("[x] [Fiber] 致命错误: %s", err)
|
2022-10-04 00:24:41 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func reloadApp(c *config.BasicConfig) *fiber.App {
|
2022-10-06 16:41:32 +08:00
|
|
|
if global.App != nil {
|
|
|
|
_ = global.App.Shutdown()
|
2022-10-04 00:24:41 +08:00
|
|
|
}
|
|
|
|
|
2022-10-06 16:41:32 +08:00
|
|
|
global.App = fiber.New(fiber.Config{
|
2022-10-04 16:50:14 +08:00
|
|
|
JSONEncoder: json.Marshal,
|
|
|
|
JSONDecoder: json.Unmarshal,
|
2022-10-04 00:24:41 +08:00
|
|
|
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
|
|
|
|
|
2022-10-24 01:41:31 +08:00
|
|
|
logger.Log.Errorf("%#v", err)
|
|
|
|
|
2022-10-04 00:24:41 +08:00
|
|
|
if e, ok := err.(*fiber.Error); ok {
|
2022-10-24 01:41:31 +08:00
|
|
|
logger.Log.Debugf("err %v", e)
|
2022-10-04 00:24:41 +08:00
|
|
|
code = e.Code
|
2022-10-24 01:41:31 +08:00
|
|
|
if code == fiber.StatusNotFound {
|
|
|
|
return ctx.Status(fiber.StatusNotFound).JSON(errorx.NewErrorWithCode(code, "页面不存在"))
|
|
|
|
}
|
|
|
|
|
2022-10-04 00:24:41 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
err = ctx.Status(code).JSON(errorx.NewDefaultError(err.Error()))
|
|
|
|
if err != nil {
|
|
|
|
return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error")
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
},
|
|
|
|
})
|
|
|
|
|
2022-10-04 01:46:48 +08:00
|
|
|
if c.Server.EnableRoutesMsg {
|
2022-10-06 16:41:32 +08:00
|
|
|
routes(global.App)
|
2022-10-04 01:46:48 +08:00
|
|
|
}
|
|
|
|
|
2022-10-06 17:58:11 +08:00
|
|
|
// 路由注册
|
2022-10-06 16:41:32 +08:00
|
|
|
controller.SwaggerHandler(global.App)
|
|
|
|
controller.ErrorHandler(global.App)
|
2022-10-06 17:58:11 +08:00
|
|
|
controller.RegisterController(global.App)
|
|
|
|
|
|
|
|
// 初始化服务
|
|
|
|
services.Init()
|
2022-10-04 00:24:41 +08:00
|
|
|
|
2022-10-06 16:41:32 +08:00
|
|
|
global.App.Hooks().OnListen(func() error {
|
2022-10-05 16:02:09 +08:00
|
|
|
utils.MainAppExec(func() {
|
2022-10-04 03:24:13 +08:00
|
|
|
logger.Log.Infoln("[√] [服务启动完成]")
|
|
|
|
})
|
2022-10-04 01:46:48 +08:00
|
|
|
return nil
|
|
|
|
})
|
|
|
|
|
2022-10-06 16:41:32 +08:00
|
|
|
return global.App
|
2022-10-04 00:24:41 +08:00
|
|
|
}
|