Return JSON-encoded errors

This commit is contained in:
strNophix 2022-08-28 15:07:46 +02:00
parent 9da60fa4e7
commit 0110d6994b
5 changed files with 52 additions and 7 deletions

View File

@ -2,14 +2,17 @@ package main
import ( import (
"flag" "flag"
"net/http"
"5feet11/internal/config" "5feet11/internal/config"
"5feet11/internal/errorx"
"5feet11/internal/handler" "5feet11/internal/handler"
"5feet11/internal/svc" "5feet11/internal/svc"
"github.com/zeromicro/go-zero/core/conf" "github.com/zeromicro/go-zero/core/conf"
"github.com/zeromicro/go-zero/core/logx" "github.com/zeromicro/go-zero/core/logx"
"github.com/zeromicro/go-zero/rest" "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") var configFile = flag.String("f", "etc/fivefeeteleven-api.yaml", "the config file")
@ -26,6 +29,15 @@ func main() {
ctx := svc.NewServiceContext(c) ctx := svc.NewServiceContext(c)
handler.RegisterHandlers(server, ctx) 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) logx.Infof("Starting server at http://%s:%d", c.Host, c.Port)
server.Start() server.Start()
} }

32
internal/errorx/http.go Normal file
View File

@ -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,
}
}

View File

@ -2,9 +2,9 @@ package logic
import ( import (
"context" "context"
"fmt"
"5feet11/internal/db" "5feet11/internal/db"
"5feet11/internal/errorx"
"5feet11/internal/svc" "5feet11/internal/svc"
"5feet11/internal/types" "5feet11/internal/types"
@ -31,11 +31,11 @@ func (l *ExpandUrlLogic) ExpandUrl(req *types.ExpandReq) (resp *types.ExpandResp
var urls []db.UrlModel var urls []db.UrlModel
if err := queryUrl.Select(&urls); err != nil { if err := queryUrl.Select(&urls); err != nil {
return nil, err return nil, errorx.NewDefaultError(err.Error())
} }
if len(urls) != 1 { if len(urls) != 1 {
return nil, fmt.Errorf("no URL found") return nil, errorx.NewDefaultError("no URL found")
} }
resp = &types.ExpandResp{ resp = &types.ExpandResp{

View File

@ -2,9 +2,9 @@ package logic
import ( import (
"context" "context"
"fmt"
"5feet11/internal/db" "5feet11/internal/db"
"5feet11/internal/errorx"
"5feet11/internal/svc" "5feet11/internal/svc"
"5feet11/internal/types" "5feet11/internal/types"
@ -31,11 +31,11 @@ func (l *GetLinkLogic) GetLink(req *types.ExpandReq) (resp *types.GetLinkResp, e
var urls []db.UrlModel var urls []db.UrlModel
if err := queryUrl.Select(&urls); err != nil { if err := queryUrl.Select(&urls); err != nil {
return nil, err return nil, errorx.NewDefaultError(err.Error())
} }
if len(urls) != 1 { if len(urls) != 1 {
return nil, fmt.Errorf("no URL found") return nil, errorx.NewDefaultError("no URL found")
} }
resp = &types.GetLinkResp{ resp = &types.GetLinkResp{

View File

@ -5,6 +5,7 @@ import (
"time" "time"
"5feet11/internal/db" "5feet11/internal/db"
"5feet11/internal/errorx"
"5feet11/internal/svc" "5feet11/internal/svc"
"5feet11/internal/types" "5feet11/internal/types"
@ -43,7 +44,7 @@ func (l *ShortenUrlLogic) ShortenUrl(req *types.ShortenReq) (resp *types.Shorten
}) })
if err := insertUrl.ExecRelease(); err != nil { if err := insertUrl.ExecRelease(); err != nil {
return nil, err return nil, errorx.NewDefaultError(err.Error())
} }
resp = &types.ShortenResp{ resp = &types.ShortenResp{