Ai
43 Star 347 Fork 190

GVPiBUILDING-X/driver-box

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
restful.go 1.54 KB
一键复制 编辑 原始数据 按行查看 历史
三刀 提交于 2024-11-25 17:48 +08:00 . 适配httprouter
package restful
import (
"encoding/json"
"github.com/ibuilding-x/driver-box/driverbox/restful/response"
"github.com/ibuilding-x/driver-box/internal/logger"
"github.com/julienschmidt/httprouter"
"go.uber.org/zap"
"net/http"
)
var HttpRouter = httprouter.New()
// Handler 处理函数
type Handler func(*http.Request) (any, error)
// HandleFunc 注册处理函数
func HandleFunc(method, pattern string, handler Handler) {
logger.Logger.Info("register api", zap.String("method", method), zap.String("pattern", pattern))
HttpRouter.HandlerFunc(method, pattern, func(writer http.ResponseWriter, request *http.Request) {
// 定义响应数据结构
var data response.Common
// 处理请求
result, err := handler(request)
if err != nil {
// 定义错误信息
data.ErrorMsg = err.Error()
// 定义错误码
if code, ok := errorCodes[err]; ok {
data.ErrorCode = code
} else {
data.ErrorCode = errorCodes[UndefinedErr]
}
} else {
data.Success = true
data.ErrorCode = 200
data.Data = result
}
// 设置响应头
writer.Header().Set("Content-Type", "application/json")
// 序列化响应数据
b, err := json.Marshal(data)
if err != nil {
logger.Logger.Error("[api] json marshal fail", zap.Error(err))
http.Error(writer, err.Error(), http.StatusInternalServerError)
return
}
// 写入响应数据
_, err = writer.Write(b)
if err != nil {
logger.Logger.Error("[api] write response fail", zap.Error(err))
http.Error(writer, err.Error(), http.StatusInternalServerError)
return
}
})
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/iBUILDING-X/driver-box.git
git@gitee.com:iBUILDING-X/driver-box.git
iBUILDING-X
driver-box
driver-box
master

搜索帮助