From 0110d6994b6a6b210a862739f905143dafe9404c Mon Sep 17 00:00:00 2001 From: strNophix Date: Sun, 28 Aug 2022 15:07:46 +0200 Subject: [PATCH] Return JSON-encoded errors --- fivefeeteleven.go | 12 ++++++++++++ internal/errorx/http.go | 32 +++++++++++++++++++++++++++++++ internal/logic/expandurllogic.go | 6 +++--- internal/logic/getlinklogic.go | 6 +++--- internal/logic/shortenurllogic.go | 3 ++- 5 files changed, 52 insertions(+), 7 deletions(-) create mode 100644 internal/errorx/http.go diff --git a/fivefeeteleven.go b/fivefeeteleven.go index ecde576..41e52a8 100644 --- a/fivefeeteleven.go +++ b/fivefeeteleven.go @@ -2,14 +2,17 @@ package main import ( "flag" + "net/http" "5feet11/internal/config" + "5feet11/internal/errorx" "5feet11/internal/handler" "5feet11/internal/svc" "github.com/zeromicro/go-zero/core/conf" "github.com/zeromicro/go-zero/core/logx" "github.com/zeromicro/go-zero/rest" + "github.com/zeromicro/go-zero/rest/httpx" ) var configFile = flag.String("f", "etc/fivefeeteleven-api.yaml", "the config file") @@ -26,6 +29,15 @@ func main() { ctx := svc.NewServiceContext(c) handler.RegisterHandlers(server, ctx) + httpx.SetErrorHandler(func(err error) (int, interface{}) { + switch e := err.(type) { + case *errorx.CodeError: + return http.StatusBadRequest, e.Data() + default: + return http.StatusInternalServerError, nil + } + }) + logx.Infof("Starting server at http://%s:%d", c.Host, c.Port) server.Start() } diff --git a/internal/errorx/http.go b/internal/errorx/http.go new file mode 100644 index 0000000..678a54b --- /dev/null +++ b/internal/errorx/http.go @@ -0,0 +1,32 @@ +package errorx + +const defaultCode = 1001 + +type CodeError struct { + Code int `json:"code"` + Msg string `json:"msg"` +} + +type CodeErrorResponse struct { + Code int `json:"code"` + Msg string `json:"msg"` +} + +func NewCodeError(code int, msg string) error { + return &CodeError{Code: code, Msg: msg} +} + +func NewDefaultError(msg string) error { + return NewCodeError(defaultCode, msg) +} + +func (e *CodeError) Error() string { + return e.Msg +} + +func (e *CodeError) Data() *CodeErrorResponse { + return &CodeErrorResponse{ + Code: e.Code, + Msg: e.Msg, + } +} diff --git a/internal/logic/expandurllogic.go b/internal/logic/expandurllogic.go index cca6869..697a697 100644 --- a/internal/logic/expandurllogic.go +++ b/internal/logic/expandurllogic.go @@ -2,9 +2,9 @@ package logic import ( "context" - "fmt" "5feet11/internal/db" + "5feet11/internal/errorx" "5feet11/internal/svc" "5feet11/internal/types" @@ -31,11 +31,11 @@ func (l *ExpandUrlLogic) ExpandUrl(req *types.ExpandReq) (resp *types.ExpandResp var urls []db.UrlModel if err := queryUrl.Select(&urls); err != nil { - return nil, err + return nil, errorx.NewDefaultError(err.Error()) } if len(urls) != 1 { - return nil, fmt.Errorf("no URL found") + return nil, errorx.NewDefaultError("no URL found") } resp = &types.ExpandResp{ diff --git a/internal/logic/getlinklogic.go b/internal/logic/getlinklogic.go index 830a70e..bddf5f4 100644 --- a/internal/logic/getlinklogic.go +++ b/internal/logic/getlinklogic.go @@ -2,9 +2,9 @@ package logic import ( "context" - "fmt" "5feet11/internal/db" + "5feet11/internal/errorx" "5feet11/internal/svc" "5feet11/internal/types" @@ -31,11 +31,11 @@ func (l *GetLinkLogic) GetLink(req *types.ExpandReq) (resp *types.GetLinkResp, e var urls []db.UrlModel if err := queryUrl.Select(&urls); err != nil { - return nil, err + return nil, errorx.NewDefaultError(err.Error()) } if len(urls) != 1 { - return nil, fmt.Errorf("no URL found") + return nil, errorx.NewDefaultError("no URL found") } resp = &types.GetLinkResp{ diff --git a/internal/logic/shortenurllogic.go b/internal/logic/shortenurllogic.go index e355fe7..83a099c 100644 --- a/internal/logic/shortenurllogic.go +++ b/internal/logic/shortenurllogic.go @@ -5,6 +5,7 @@ import ( "time" "5feet11/internal/db" + "5feet11/internal/errorx" "5feet11/internal/svc" "5feet11/internal/types" @@ -43,7 +44,7 @@ func (l *ShortenUrlLogic) ShortenUrl(req *types.ShortenReq) (resp *types.Shorten }) if err := insertUrl.ExecRelease(); err != nil { - return nil, err + return nil, errorx.NewDefaultError(err.Error()) } resp = &types.ShortenResp{