✨ 完成基础脚手架
This commit is contained in:
52
core/error_handle.go
Normal file
52
core/error_handle.go
Normal file
@@ -0,0 +1,52 @@
|
||||
package core
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"gitee.ltd/lxh/logger"
|
||||
"github.com/gin-gonic/gin"
|
||||
"net"
|
||||
"net/http"
|
||||
"os"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// NoMethodHandler 请求方式不对
|
||||
func NoMethodHandler() gin.HandlerFunc {
|
||||
return func(ctx *gin.Context) {
|
||||
R(ctx).FailWithMessageAndCode(fmt.Sprintf("不支持%v请求", ctx.Request.Method), http.StatusMethodNotAllowed)
|
||||
ctx.Abort()
|
||||
}
|
||||
}
|
||||
|
||||
// NoRouteHandler 404异常处理
|
||||
func NoRouteHandler() gin.HandlerFunc {
|
||||
return func(ctx *gin.Context) {
|
||||
R(ctx).FailWithMessageAndCode("请求接口不存在", http.StatusNotFound)
|
||||
ctx.Abort()
|
||||
}
|
||||
}
|
||||
|
||||
// Recovery Panic捕获
|
||||
func Recovery() gin.HandlerFunc {
|
||||
return func(ctx *gin.Context) {
|
||||
defer func() {
|
||||
if err := recover(); err != nil {
|
||||
logger.Say.Errorf("系统错误: %v", err)
|
||||
var brokenPipe bool
|
||||
if ne, ok := err.(*net.OpError); ok {
|
||||
if se, ok := ne.Err.(*os.SyscallError); ok {
|
||||
if strings.Contains(strings.ToLower(se.Error()), "broken pipe") || strings.Contains(strings.ToLower(se.Error()), "connection reset by peer") {
|
||||
brokenPipe = true
|
||||
}
|
||||
}
|
||||
}
|
||||
if brokenPipe {
|
||||
logger.Say.Errorf("%s", err)
|
||||
}
|
||||
R(ctx).FailWithMessage("服务器异常,请联系管理员")
|
||||
ctx.Abort()
|
||||
}
|
||||
}()
|
||||
ctx.Next()
|
||||
}
|
||||
}
|
84
core/response.go
Normal file
84
core/response.go
Normal file
@@ -0,0 +1,84 @@
|
||||
package core
|
||||
|
||||
import (
|
||||
"ginDemo/utils"
|
||||
"github.com/gin-gonic/gin"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
// 返回数据包装
|
||||
type response struct {
|
||||
Code int `json:"code"`
|
||||
Data any `json:"data"`
|
||||
Msg string `json:"message"`
|
||||
}
|
||||
|
||||
type rs struct {
|
||||
ctx *gin.Context
|
||||
}
|
||||
|
||||
// 定义状态码
|
||||
const (
|
||||
ERROR = http.StatusInternalServerError
|
||||
SUCCESS = http.StatusOK
|
||||
)
|
||||
|
||||
func R(ctx *gin.Context) *rs {
|
||||
return &rs{ctx}
|
||||
}
|
||||
|
||||
// Result 手动组装返回结果
|
||||
func (r rs) Result(code int, data any, msg string) {
|
||||
//if data == nil {
|
||||
// data = map[string]any{}
|
||||
//}
|
||||
|
||||
r.ctx.JSON(code, response{
|
||||
code,
|
||||
data,
|
||||
msg,
|
||||
})
|
||||
}
|
||||
|
||||
// Ok 返回无数据的成功
|
||||
func (r rs) Ok() {
|
||||
r.Result(SUCCESS, nil, "操作成功")
|
||||
}
|
||||
|
||||
// OkWithMessage 返回自定义成功的消息
|
||||
func (r rs) OkWithMessage(message string) {
|
||||
r.Result(SUCCESS, nil, message)
|
||||
}
|
||||
|
||||
// OkWithData 自定义内容的成功返回
|
||||
func (r rs) OkWithData(data any) {
|
||||
r.Result(SUCCESS, data, "操作成功")
|
||||
}
|
||||
|
||||
// OkWithPageData 返回分页数据
|
||||
func (r rs) OkWithPageData(data any, total int64, current, size int) {
|
||||
// 计算总页码
|
||||
totalPage := utils.GenTotalPage(total, size)
|
||||
// 返回结果
|
||||
r.Result(SUCCESS, PageData{Current: current, Size: size, Total: total, TotalPage: totalPage, Records: data}, "操作成功")
|
||||
}
|
||||
|
||||
// OkDetailed 自定义消息和内容的成功返回
|
||||
func (r rs) OkDetailed(data any, message string) {
|
||||
r.Result(SUCCESS, data, message)
|
||||
}
|
||||
|
||||
// Fail 返回默认失败
|
||||
func (r rs) Fail() {
|
||||
r.Result(ERROR, nil, "操作失败")
|
||||
}
|
||||
|
||||
// FailWithMessage 返回默认状态码自定义消息的失败
|
||||
func (r rs) FailWithMessage(message string) {
|
||||
r.Result(ERROR, nil, message)
|
||||
}
|
||||
|
||||
// FailWithMessageAndCode 返回自定义消息和状态码的失败
|
||||
func (r rs) FailWithMessageAndCode(message string, code int) {
|
||||
r.Result(code, nil, message)
|
||||
}
|
10
core/response_page.go
Normal file
10
core/response_page.go
Normal file
@@ -0,0 +1,10 @@
|
||||
package core
|
||||
|
||||
// PageData 分页数据通用结构体
|
||||
type PageData struct {
|
||||
Current int `json:"current"` // 当前页码
|
||||
Size int `json:"size"` // 每页数量
|
||||
Total int64 `json:"total"` // 总数
|
||||
TotalPage int `json:"total_page"` // 总页数
|
||||
Records any `json:"records"` // 返回数据
|
||||
}
|
Reference in New Issue
Block a user