错误处理

    • 业务处理正常

    • 业务处理异常

      1. {
      2. "code": 10001,
      3. "msg": "参数错误"
      4. }
    1. curl -X POST \
    2. http://127.0.0.1:8888/user/login \
    3. -H 'content-type: application/json' \
    4. -d '{
    5. "username":"1",
    6. "password":"123456"
    7. }'

    接下来我们将其以json格式进行返回

    • 首先在common中添加一个baseerror.go文件,并填入代码

      1. $ cd common
      2. $ mkdir errorx&&cd errorx
      3. $ vim baseerror.go
      1. package errorx
      2. const defaultCode = 1001
      3. type CodeError struct {
      4. Code int `json:"code"`
      5. Msg string `json:"msg"`
      6. }
      7. Code int `json:"code"`
      8. Msg string `json:"msg"`
      9. }
      10. func NewCodeError(code int, msg string) error {
      11. return &CodeError{Code: code, Msg: msg}
      12. }
      13. func NewDefaultError(msg string) error {
      14. return NewCodeError(defaultCode, msg)
      15. }
      16. func (e *CodeError) Error() string {
      17. return e.Msg
      18. }
      19. func (e *CodeError) Data() *CodeErrorResponse {
      20. return &CodeErrorResponse{
      21. Code: e.Code,
      22. Msg: e.Msg,
      23. }
      24. }
    • 开启自定义错误

      1. $ vim service/user/cmd/api/user.go
      1. func main() {
      2. flag.Parse()
      3. conf.MustLoad(*configFile, &c)
      4. ctx := svc.NewServiceContext(c)
      5. server := rest.MustNewServer(c.RestConf)
      6. defer server.Stop()
      7. handler.RegisterHandlers(server, ctx)
      8. // 自定义错误
      9. httpx.SetErrorHandler(func(err error) (int, interface{}) {
      10. switch e := err.(type) {
      11. case *errorx.CodeError:
      12. return http.StatusOK, e.Data()
      13. default:
      14. return http.StatusInternalServerError, nil
      15. }
      16. })
      17. fmt.Printf("Starting server at %s:%d...\n", c.Host, c.Port)
      18. server.Start()
      19. }
    • 重启服务验证

      1. HTTP/1.1 200 OK
      2. Content-Type: application/json
      3. Date: Tue, 09 Feb 2021 06:47:29 GMT
      4. Content-Length: 40