49 lines
1.1 KiB
Go
49 lines
1.1 KiB
Go
package middleware
|
|
|
|
import (
|
|
"github.com/gofiber/fiber/v2"
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
// RequestID 为每个请求注入RequestID
|
|
func RequestID() fiber.Handler {
|
|
return func(c *fiber.Ctx) error {
|
|
rid := c.Get("X-Request-Id")
|
|
if rid == "" {
|
|
rid = uuid.New().String()
|
|
}
|
|
c.Set("X-Request-Id", rid)
|
|
c.Locals("requestId", rid)
|
|
return c.Next()
|
|
}
|
|
}
|
|
|
|
// StandardResponse 统一响应格式中间件
|
|
func StandardResponse() fiber.Handler {
|
|
return func(c *fiber.Ctx) error {
|
|
// 先执行handler
|
|
err := c.Next()
|
|
if err != nil {
|
|
// 处理handler返回的错误
|
|
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
|
"Success": false,
|
|
"Code": "INTERNAL_ERROR",
|
|
"Message": err.Error(),
|
|
})
|
|
}
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// CORS 跨域中间件
|
|
func CORS() fiber.Handler {
|
|
return func(c *fiber.Ctx) error {
|
|
c.Set("Access-Control-Allow-Origin", "*")
|
|
c.Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS")
|
|
c.Set("Access-Control-Allow-Headers", "Content-Type, Authorization, X-Request-Id")
|
|
if c.Method() == "OPTIONS" {
|
|
return c.SendStatus(fiber.StatusNoContent)
|
|
}
|
|
return c.Next()
|
|
}
|
|
} |