feat: add simple readme

This commit is contained in:
loveuer 2024-01-13 15:05:46 +08:00
parent f0fc5fa44f
commit 7c03a40ef0
2 changed files with 107 additions and 3 deletions

43
app.go
View File

@ -1,8 +1,11 @@
package nf package nf
import ( import (
"context"
"crypto/tls"
"errors" "errors"
"fmt" "fmt"
"net"
"net/http" "net/http"
"strings" "strings"
) )
@ -12,6 +15,7 @@ type App struct {
config *Config config *Config
router *router router *router
groups []*RouterGroup groups []*RouterGroup
server *http.Server
} }
func (a *App) ServeHTTP(writer http.ResponseWriter, request *http.Request) { func (a *App) ServeHTTP(writer http.ResponseWriter, request *http.Request) {
@ -36,9 +40,42 @@ func (a *App) ServeHTTP(writer http.ResponseWriter, request *http.Request) {
} }
} }
func (a *App) Run(address string) error { func (a *App) run(ln net.Listener) error {
if !a.config.DisableBanner { if !a.config.DisableBanner {
fmt.Println(banner + "nf serve at: " + address + "\n") fmt.Println(banner + "nf serve at: " + a.server.Addr + "\n")
} }
return http.ListenAndServe(address, a)
return a.server.Serve(ln)
}
func (a *App) Run(address string) error {
ln, err := net.Listen("tcp", address)
if err != nil {
return err
}
a.server = &http.Server{}
return a.run(ln)
}
func (a *App) RunTLS(address string, tlsConfig *tls.Config) error {
ln, err := tls.Listen("tcp", address, tlsConfig)
if err != nil {
return err
}
a.server = &http.Server{}
return a.run(ln)
}
func (a *App) RunListener(ln net.Listener) error {
a.server = &http.Server{}
return a.run(ln)
}
func (a *App) Shutdown(ctx context.Context) error {
return a.server.Shutdown(ctx)
} }

67
readme.md Normal file
View File

@ -0,0 +1,67 @@
# NF Web Framework
### Usage
##### basic usage
- get param
```go
func main() {
app := nf.New()
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
```go
func handleQuery(c *nf.Ctx) error {
type Req struct {
Name string `query:"name"`
Addr []string `query:"addr"`
}
var (
err error
req = 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
```go
func handlePost(c *nf.Ctx) error {
type Req struct {
Name string `json:"name"`
Addr []string `json:"addr"`
}
var (
err error
req = Req{}
reqMap = make(map[string]any)
)
if err = c.BodyParser(&req); err != nil {
return nf.NewNFError(400, err.Error())
}
// 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})
}
```