feat: add nft(nf_util) package: resp(wrap status, data, msg ...); add config: enable_not_impled_handler(default return 501 not impled)
This commit is contained in:
		
							
								
								
									
										70
									
								
								nft/resp/error.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								nft/resp/error.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,70 @@ | ||||
| package resp | ||||
|  | ||||
| import ( | ||||
| 	"errors" | ||||
| 	"fmt" | ||||
| 	"github.com/loveuer/nf" | ||||
| ) | ||||
|  | ||||
| type Error struct { | ||||
| 	status uint32 | ||||
| 	msg    string | ||||
| 	err    error | ||||
| 	data   any | ||||
| } | ||||
|  | ||||
| func (e Error) Error() string { | ||||
| 	if e.msg != "" { | ||||
| 		return fmt.Sprintf("%s: %s", e.msg, e.err.Error()) | ||||
| 	} | ||||
|  | ||||
| 	switch e.status { | ||||
| 	case 200: | ||||
| 		return fmt.Sprintf("%s: %s", MSG200, e.err.Error()) | ||||
| 	case 202: | ||||
| 		return fmt.Sprintf("%s: %s", MSG202, e.err.Error()) | ||||
| 	case 400: | ||||
| 		return fmt.Sprintf("%s: %s", MSG400, e.err.Error()) | ||||
| 	case 401: | ||||
| 		return fmt.Sprintf("%s: %s", MSG401, e.err.Error()) | ||||
| 	case 403: | ||||
| 		return fmt.Sprintf("%s: %s", MSG403, e.err.Error()) | ||||
| 	case 404: | ||||
| 		return fmt.Sprintf("%s: %s", MSG404, e.err.Error()) | ||||
| 	case 429: | ||||
| 		return fmt.Sprintf("%s: %s", MSG429, e.err.Error()) | ||||
| 	case 500: | ||||
| 		return fmt.Sprintf("%s: %s", MSG500, e.err.Error()) | ||||
| 	case 501: | ||||
| 		return fmt.Sprintf("%s: %s", MSG501, e.err.Error()) | ||||
| 	} | ||||
|  | ||||
| 	return e.err.Error() | ||||
|  | ||||
| } | ||||
|  | ||||
| func NewError(statusCode uint32, msg string, rawErr error, data any) Error { | ||||
| 	return Error{ | ||||
| 		status: statusCode, | ||||
| 		msg:    msg, | ||||
| 		err:    rawErr, | ||||
| 		data:   data, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func RespError(c *nf.Ctx, err error) error { | ||||
| 	if err == nil { | ||||
| 		return Resp(c, 500, MSG500, "response with nil error", nil) | ||||
| 	} | ||||
|  | ||||
| 	var re = &Error{} | ||||
| 	if errors.As(err, re) { | ||||
| 		if re.err == nil { | ||||
| 			return Resp(c, re.status, re.msg, re.msg, re.data) | ||||
| 		} | ||||
|  | ||||
| 		return Resp(c, re.status, re.msg, re.err.Error(), re.data) | ||||
| 	} | ||||
|  | ||||
| 	return Resp(c, 500, MSG500, err.Error(), nil) | ||||
| } | ||||
							
								
								
									
										127
									
								
								nft/resp/resp.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										127
									
								
								nft/resp/resp.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,127 @@ | ||||
| package resp | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"github.com/loveuer/nf" | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
| ) | ||||
|  | ||||
| func handleEmptyMsg(status uint32, msg string) string { | ||||
| 	if msg == "" { | ||||
| 		switch status { | ||||
| 		case 200: | ||||
| 			msg = MSG200 | ||||
| 		case 202: | ||||
| 			msg = MSG202 | ||||
| 		case 400: | ||||
| 			msg = MSG400 | ||||
| 		case 401: | ||||
| 			msg = MSG401 | ||||
| 		case 403: | ||||
| 			msg = MSG403 | ||||
| 		case 404: | ||||
| 			msg = MSG404 | ||||
| 		case 429: | ||||
| 			msg = MSG429 | ||||
| 		case 500: | ||||
| 			msg = MSG500 | ||||
| 		case 501: | ||||
| 			msg = MSG501 | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return msg | ||||
| } | ||||
|  | ||||
| func Resp(c *nf.Ctx, status uint32, msg string, err string, data any) error { | ||||
| 	msg = handleEmptyMsg(status, msg) | ||||
|  | ||||
| 	c.Set(RealStatusHeader, strconv.Itoa(int(status))) | ||||
|  | ||||
| 	if data == nil { | ||||
| 		return c.JSON(nf.Map{"status": status, "msg": msg, "err": err}) | ||||
| 	} | ||||
|  | ||||
| 	return c.JSON(nf.Map{"status": status, "msg": msg, "err": err, "data": data}) | ||||
| } | ||||
|  | ||||
| func Resp200(c *nf.Ctx, data any, msgs ...string) error { | ||||
| 	msg := MSG200 | ||||
|  | ||||
| 	if len(msgs) > 0 && msgs[0] != "" { | ||||
| 		msg = fmt.Sprintf("%s: %s", msg, strings.Join(msgs, "; ")) | ||||
| 	} | ||||
|  | ||||
| 	return Resp(c, 200, msg, "", data) | ||||
| } | ||||
|  | ||||
| func Resp202(c *nf.Ctx, data any, msgs ...string) error { | ||||
| 	msg := MSG202 | ||||
|  | ||||
| 	if len(msgs) > 0 && msgs[0] != "" { | ||||
| 		msg = fmt.Sprintf("%s: %s", msg, strings.Join(msgs, "; ")) | ||||
| 	} | ||||
|  | ||||
| 	return Resp(c, 202, msg, "", data) | ||||
| } | ||||
|  | ||||
| func Resp400(c *nf.Ctx, data any, msgs ...string) error { | ||||
| 	msg := MSG400 | ||||
| 	err := "" | ||||
|  | ||||
| 	if len(msgs) > 0 && msgs[0] != "" { | ||||
| 		msg = fmt.Sprintf("%s: %s", msg, strings.Join(msgs, "; ")) | ||||
| 		err = msg | ||||
| 	} | ||||
|  | ||||
| 	return Resp(c, 400, msg, err, data) | ||||
| } | ||||
|  | ||||
| func Resp401(c *nf.Ctx, data any, msgs ...string) error { | ||||
| 	msg := MSG401 | ||||
| 	err := "" | ||||
|  | ||||
| 	if len(msgs) > 0 && msgs[0] != "" { | ||||
| 		msg = fmt.Sprintf("%s: %s", msg, strings.Join(msgs, "; ")) | ||||
| 		err = msg | ||||
| 	} | ||||
|  | ||||
| 	return Resp(c, 401, msg, err, data) | ||||
| } | ||||
|  | ||||
| func Resp403(c *nf.Ctx, data any, msgs ...string) error { | ||||
| 	msg := MSG403 | ||||
| 	err := "" | ||||
|  | ||||
| 	if len(msgs) > 0 && msgs[0] != "" { | ||||
| 		msg = fmt.Sprintf("%s: %s", msg, strings.Join(msgs, "; ")) | ||||
| 		err = msg | ||||
| 	} | ||||
|  | ||||
| 	return Resp(c, 403, msg, err, data) | ||||
| } | ||||
|  | ||||
| func Resp429(c *nf.Ctx, data any, msgs ...string) error { | ||||
| 	msg := MSG429 | ||||
| 	err := "" | ||||
|  | ||||
| 	if len(msgs) > 0 && msgs[0] != "" { | ||||
| 		msg = fmt.Sprintf("%s: %s", msg, strings.Join(msgs, "; ")) | ||||
| 		err = "" | ||||
| 	} | ||||
|  | ||||
| 	return Resp(c, 429, msg, err, data) | ||||
| } | ||||
|  | ||||
| func Resp500(c *nf.Ctx, data any, msgs ...string) error { | ||||
| 	msg := MSG500 | ||||
| 	err := "" | ||||
|  | ||||
| 	if len(msgs) > 0 && msgs[0] != "" { | ||||
| 		msg = fmt.Sprintf("%s: %s", msg, strings.Join(msgs, "; ")) | ||||
| 		err = msg | ||||
| 	} | ||||
|  | ||||
| 	return Resp(c, 500, msg, err, data) | ||||
| } | ||||
							
								
								
									
										17
									
								
								nft/resp/var.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								nft/resp/var.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| package resp | ||||
|  | ||||
| const ( | ||||
| 	MSG200 = "请求成功" | ||||
| 	MSG202 = "请求成功, 请稍后..." | ||||
| 	MSG400 = "请求参数错误" | ||||
| 	MSG401 = "登录已过期, 请重新登录" | ||||
| 	MSG403 = "请求权限不足" | ||||
| 	MSG404 = "请求资源未找到" | ||||
| 	MSG429 = "请求过于频繁, 请稍后再试" | ||||
| 	MSG500 = "服务器开小差了, 请稍后再试" | ||||
| 	MSG501 = "功能开发中, 尽情期待" | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| 	RealStatusHeader = "NF-STATUS" | ||||
| ) | ||||
		Reference in New Issue
	
	Block a user