Compare commits

..

3 Commits

Author SHA1 Message Date
af1e58bce9 update: add resp 418 2024-09-19 01:43:05 -07:00
940e86bd8d chore: update go module, readme 2024-08-27 14:39:24 +08:00
5263cba44a chore: expose default logger
chore: add ctx alias method
2024-08-12 16:14:16 +08:00
5 changed files with 116 additions and 60 deletions

7
ctx.go
View File

@ -295,10 +295,17 @@ func (c *Ctx) Status(code int) *Ctx {
return c return c
} }
// Set set response header
func (c *Ctx) Set(key string, value string) { func (c *Ctx) Set(key string, value string) {
c.Writer.Header().Set(key, value) c.Writer.Header().Set(key, value)
} }
// AddHeader add response header
func (c *Ctx) AddHeader(key string, value string) {
c.Writer.Header().Add(key, value)
}
// SetHeader set response header
func (c *Ctx) SetHeader(key string, value string) { func (c *Ctx) SetHeader(key string, value string) {
c.Writer.Header().Set(key, value) c.Writer.Header().Set(key, value)
} }

View File

@ -21,7 +21,7 @@ var (
os.Exit(1) os.Exit(1)
} }
defaultLogger = &logger{ DefaultLogger = &logger{
Mutex: sync.Mutex{}, Mutex: sync.Mutex{},
timeFormat: "2006-01-02T15:04:05", timeFormat: "2006-01-02T15:04:05",
writer: os.Stdout, writer: os.Stdout,
@ -36,32 +36,32 @@ var (
) )
func SetTimeFormat(format string) { func SetTimeFormat(format string) {
defaultLogger.SetTimeFormat(format) DefaultLogger.SetTimeFormat(format)
} }
func SetLogLevel(level LogLevel) { func SetLogLevel(level LogLevel) {
defaultLogger.SetLogLevel(level) DefaultLogger.SetLogLevel(level)
} }
func Debug(msg string, data ...any) { func Debug(msg string, data ...any) {
defaultLogger.Debug(msg, data...) DefaultLogger.Debug(msg, data...)
} }
func Info(msg string, data ...any) { func Info(msg string, data ...any) {
defaultLogger.Info(msg, data...) DefaultLogger.Info(msg, data...)
} }
func Warn(msg string, data ...any) { func Warn(msg string, data ...any) {
defaultLogger.Warn(msg, data...) DefaultLogger.Warn(msg, data...)
} }
func Error(msg string, data ...any) { func Error(msg string, data ...any) {
defaultLogger.Error(msg, data...) DefaultLogger.Error(msg, data...)
} }
func Panic(msg string, data ...any) { func Panic(msg string, data ...any) {
defaultLogger.Panic(msg, data...) DefaultLogger.Panic(msg, data...)
} }
func Fatal(msg string, data ...any) { func Fatal(msg string, data ...any) {
defaultLogger.Fatal(msg, data...) DefaultLogger.Fatal(msg, data...)
} }

View File

@ -2,9 +2,10 @@ package resp
import ( import (
"fmt" "fmt"
"github.com/loveuer/nf"
"strconv" "strconv"
"strings" "strings"
"github.com/loveuer/nf"
) )
func handleEmptyMsg(status uint32, msg string) string { func handleEmptyMsg(status uint32, msg string) string {
@ -102,6 +103,18 @@ func Resp403(c *nf.Ctx, data any, msgs ...string) error {
return Resp(c, 403, msg, err, data) return Resp(c, 403, msg, err, data)
} }
func Resp418(c *nf.Ctx, data any, msgs ...string) error {
msg := MSG418
err := ""
if len(msgs) > 0 && msgs[0] != "" {
msg = fmt.Sprintf("%s: %s", msg, strings.Join(msgs, "; "))
err = ""
}
return Resp(c, 418, msg, err, data)
}
func Resp429(c *nf.Ctx, data any, msgs ...string) error { func Resp429(c *nf.Ctx, data any, msgs ...string) error {
msg := MSG429 msg := MSG429
err := "" err := ""

View File

@ -7,6 +7,7 @@ const (
MSG401 = "登录已过期, 请重新登录" MSG401 = "登录已过期, 请重新登录"
MSG403 = "请求权限不足" MSG403 = "请求权限不足"
MSG404 = "请求资源未找到" MSG404 = "请求资源未找到"
MSG418 = "请求条件不满足, 请稍后再试"
MSG429 = "请求过于频繁, 请稍后再试" MSG429 = "请求过于频繁, 请稍后再试"
MSG500 = "服务器开小差了, 请稍后再试" MSG500 = "服务器开小差了, 请稍后再试"
MSG501 = "功能开发中, 尽情期待" MSG501 = "功能开发中, 尽情期待"

129
readme.md
View File

@ -5,63 +5,98 @@
##### basic usage ##### basic usage
- get param - get param
```go
func main() {
app := nf.New()
app.Get("/hello/:name", func(c *nf.Ctx) error { ```go
name := c.Param("name") func main() {
return c.JSON(nf.Map{"status": 200, "data": "hello, " + name}) app := nf.New()
})
log.Fatal(app.Run("0.0.0.0:80")) app.Get("/hello/:name", func(c *nf.Ctx) error {
} name := c.Param("name")
``` return c.JSON(nf.Map{"status": 200, "data": "hello, " + name})
})
log.Fatal(app.Run("0.0.0.0:80"))
}
```
- parse request query - parse request query
```go
func handleQuery(c *nf.Ctx) error {
type Req struct {
Name string `query:"name"`
Addr []string `query:"addr"`
}
var ( ```go
err error func handleQuery(c *nf.Ctx) error {
req = Req{} type Req struct {
) Name string `query:"name"`
Addr []string `query:"addr"`
}
if err = c.QueryParser(&req); err != nil { var (
return nf.NewNFError(400, err.Error()) err error
} req = Req{}
)
return c.JSON(nf.Map{"query": req}) if err = c.QueryParser(&req); err != nil {
} return nf.NewNFError(400, err.Error())
``` }
return c.JSON(nf.Map{"query": req})
}
```
- parse application/json body - parse application/json body
```go
func handlePost(c *nf.Ctx) error {
type Req struct {
Name string `json:"name"`
Addr []string `json:"addr"`
}
var ( ```go
err error func handlePost(c *nf.Ctx) error {
req = Req{} type Req struct {
reqMap = make(map[string]interface{}) Name string `json:"name"`
) Addr []string `json:"addr"`
}
if err = c.BodyParser(&req); err != nil { var (
return nf.NewNFError(400, err.Error()) err error
} req = Req{}
reqMap = make(map[string]interface{})
)
// can parse body multi times if err = c.BodyParser(&req); err != nil {
if err = c.BodyParser(&reqMap); err != nil { return nf.NewNFError(400, err.Error())
return nf.NewNFError(400, err.Error()) }
}
return c.JSON(nf.Map{"struct": req, "map": reqMap}) // can parse body multi times
} if err = c.BodyParser(&reqMap); err != nil {
``` return nf.NewNFError(400, err.Error())
}
return c.JSON(nf.Map{"struct": req, "map": reqMap})
}
```
- pass local value
```go
type User struct {
Id int
Username string
}
func main() {
app := nf.New()
app.Use(auth())
app.Get("/item/list", list)
}
func auth() nf.HandlerFunc {
return func(c *nf.Ctx) error {
c.Locals("user", &User{Id: 1, Username:"user"})
return c.Next()
}
}
func list(c *nf.Ctx) error {
user, ok := c.Locals("user").(*User)
if !ok {
return c.Status(401).SendString("login required")
}
...
}
```