package main import ( "fmt" "net/http" "time" "go.uber.org/zap" "joylink.club/bj-rtsts-server/db/dbquery" "joylink.club/bj-rtsts-server/dto" "github.com/gin-contrib/cors" ginzap "github.com/gin-contrib/zap" "github.com/gin-gonic/gin" "joylink.club/bj-rtsts-server/config" "joylink.club/bj-rtsts-server/db" "joylink.club/bj-rtsts-server/logger" ) func InitServer() *gin.Engine { config.LoadConfig() fmt.Println("数据源配置为:", config.Config.Datasource.Dsn) err := logger.InitLogger() if err != nil { panic(err) } err = db.InitDb() if err != nil { panic(err) } dbquery.SetDefault(db.DB) engine := gin.New() conf := cors.DefaultConfig() conf.AllowHeaders = []string{"*"} conf.AllowAllOrigins = true engine.Use(cors.New(conf)) engine.Use(ginzap.Ginzap(zap.L(), time.DateTime, false)) // gin panic 异常处理,默认处理为 engine.Use(ginzap.RecoveryWithZap(zap.L(), true)) engine.Use(ginzap.CustomRecoveryWithZap(zap.L(), true, func(c *gin.Context, e interface{}) { switch e := e.(type) { case error: c.JSON(http.StatusInternalServerError, e) case dto.ErrorDto: e.Tip = dto.ErrorTipMap[e.Code] c.JSON(http.StatusInternalServerError, e) default: c.JSON(http.StatusInternalServerError, e) } c.Writer.WriteHeaderNow() c.Abort() })) return engine }