84 lines
2.9 KiB
Go
84 lines
2.9 KiB
Go
package router
|
||
|
||
import (
|
||
"electricity_bill_calc/controller"
|
||
"electricity_bill_calc/logger"
|
||
"electricity_bill_calc/security"
|
||
"fmt"
|
||
"runtime"
|
||
"time"
|
||
|
||
"github.com/gofiber/fiber/v2"
|
||
"github.com/gofiber/fiber/v2/middleware/compress"
|
||
"github.com/gofiber/fiber/v2/middleware/recover"
|
||
jsontime "github.com/liamylian/jsontime/v2/v2"
|
||
"go.uber.org/zap"
|
||
)
|
||
|
||
var json = jsontime.ConfigWithCustomTimeFormat
|
||
|
||
func init() {
|
||
timeZoneShanghai, _ := time.LoadLocation("Asia/Shanghai")
|
||
jsontime.AddTimeFormatAlias("simple_datetime", "2006-01-02 15:04:05")
|
||
jsontime.AddTimeFormatAlias("simple_date", "2006-01-02")
|
||
jsontime.AddLocaleAlias("shanghai", timeZoneShanghai)
|
||
}
|
||
|
||
func App() *fiber.App {
|
||
app := fiber.New(fiber.Config{ //创建fiber实例的时候选择配置选项
|
||
BodyLimit: 30 * 1024 * 1024, //设置请求正文允许的最大大小。
|
||
EnablePrintRoutes: true, //自定义方案,用于启动消息
|
||
EnableTrustedProxyCheck: false, //禁用受信代理
|
||
Prefork: false, //禁止预处理(如果要启用预处理则需要通过shell脚本运行)
|
||
ErrorHandler: errorHandler, //相应全局处理错误
|
||
JSONEncoder: json.Marshal, //json编码
|
||
JSONDecoder: json.Unmarshal, //json解码
|
||
})
|
||
app.Use(compress.New()) //压缩中间件
|
||
app.Use(recover.New(recover.Config{
|
||
EnableStackTrace: true,
|
||
StackTraceHandler: stackTraceHandler,
|
||
})) //恢复中间件
|
||
app.Use(logger.NewLogMiddleware(logger.LogMiddlewareConfig{
|
||
Logger: logger.Named("App"),
|
||
})) //日志中间件
|
||
app.Use(security.SessionRecovery) //会话恢复中间件
|
||
|
||
controller.InitializeUserHandlers(app)
|
||
controller.InitializeRegionHandlers(app)
|
||
controller.InitializeChargeHandlers(app)
|
||
controller.InitializeParkHandlers(app)
|
||
controller.InitializeTenementHandler(app)
|
||
controller.InitializeMeterHandlers(app)
|
||
controller.InitializeInvoiceHandler(app)
|
||
controller.InitializeTopUpHandlers(app)
|
||
controller.InitializeReportHandlers(app)
|
||
controller.InitializeSynchronizeHandlers(app)
|
||
controller.InitializeWithdrawHandlers(app) // 公示撤回
|
||
controller.InitializeFoundationHandlers(app) // 基础数据
|
||
controller.InitializeStatisticsController(app) // 首页信息
|
||
controller.InitializeGmController(app) // 天神模式
|
||
|
||
return app
|
||
}
|
||
|
||
// 全局错误处理
|
||
func errorHandler(c *fiber.Ctx, err error) error {
|
||
code := fiber.StatusInternalServerError
|
||
if e, ok := err.(*fiber.Error); ok {
|
||
code = e.Code
|
||
}
|
||
e := c.Status(code).SendString(err.Error())
|
||
if e != nil {
|
||
return c.Status(fiber.StatusInternalServerError).SendString(err.Error())
|
||
}
|
||
return nil
|
||
}
|
||
|
||
// 处理Recover中间件输出的栈追踪信息
|
||
func stackTraceHandler(c *fiber.Ctx, e interface{}) {
|
||
buf := make([]byte, 1024)
|
||
buf = buf[:runtime.Stack(buf, false)]
|
||
logger.Named("App", "StackTrace").Warn(fmt.Sprintf("panic: %+v", e), zap.ByteString("trace", buf), zap.Any("origin", e))
|
||
}
|