mirror of https://github.com/gofiber/fiber.git
Add route naming feature. (#1650)
* Add route naming feature. * Update basicauth_test.go * Fix gosec issues. * Change RoutaName -> Name * Fix race conditions. * Update READMEs.pull/1672/head
parent
03c9598f6e
commit
68d3b773bc
|
@ -191,6 +191,36 @@ func main() {
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### 📖 [**Route Naming**](https://docs.gofiber.io/api/app#name)
|
||||||
|
|
||||||
|
```go
|
||||||
|
func main() {
|
||||||
|
app := fiber.New()
|
||||||
|
|
||||||
|
// GET /api/register
|
||||||
|
app.Get("/api/*", func(c *fiber.Ctx) error {
|
||||||
|
msg := fmt.Sprintf("✋ %s", c.Params("*"))
|
||||||
|
return c.SendString(msg) // => ✋ register
|
||||||
|
}).Name("api")
|
||||||
|
|
||||||
|
data, _ := json.MarshalIndent(app.GetRoute("api"), "", " ")
|
||||||
|
fmt.Print(string(data))
|
||||||
|
// Prints:
|
||||||
|
// {
|
||||||
|
// "method": "GET",
|
||||||
|
// "name": "api",
|
||||||
|
// "path": "/api/*",
|
||||||
|
// "params": [
|
||||||
|
// "*1"
|
||||||
|
// ]
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
log.Fatal(app.Listen(":3000"))
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
#### 📖 [**Serving Static Files**](https://docs.gofiber.io/api/app#static)
|
#### 📖 [**Serving Static Files**](https://docs.gofiber.io/api/app#static)
|
||||||
|
|
||||||
```go
|
```go
|
||||||
|
|
|
@ -189,6 +189,36 @@ func main() {
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### 📖 [**Route Naming**](https://docs.gofiber.io/api/app#name)
|
||||||
|
|
||||||
|
```go
|
||||||
|
func main() {
|
||||||
|
app := fiber.New()
|
||||||
|
|
||||||
|
// GET /api/register
|
||||||
|
app.Get("/api/*", func(c *fiber.Ctx) error {
|
||||||
|
msg := fmt.Sprintf("✋ %s", c.Params("*"))
|
||||||
|
return c.SendString(msg) // => ✋ register
|
||||||
|
}).Name("api")
|
||||||
|
|
||||||
|
data, _ := json.MarshalIndent(app.GetRoute("api"), "", " ")
|
||||||
|
fmt.Print(string(data))
|
||||||
|
// Prints:
|
||||||
|
// {
|
||||||
|
// "method": "GET",
|
||||||
|
// "name": "api",
|
||||||
|
// "path": "/api/*",
|
||||||
|
// "params": [
|
||||||
|
// "*1"
|
||||||
|
// ]
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
log.Fatal(app.Listen(":3000"))
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
#### 📖 [**Serving Static Files**](https://docs.gofiber.io/api/app#static)
|
#### 📖 [**Serving Static Files**](https://docs.gofiber.io/api/app#static)
|
||||||
|
|
||||||
```go
|
```go
|
||||||
|
|
|
@ -189,6 +189,36 @@ func main() {
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### 📖 [**Route Naming**](https://docs.gofiber.io/api/app#name)
|
||||||
|
|
||||||
|
```go
|
||||||
|
func main() {
|
||||||
|
app := fiber.New()
|
||||||
|
|
||||||
|
// GET /api/register
|
||||||
|
app.Get("/api/*", func(c *fiber.Ctx) error {
|
||||||
|
msg := fmt.Sprintf("✋ %s", c.Params("*"))
|
||||||
|
return c.SendString(msg) // => ✋ register
|
||||||
|
}).Name("api")
|
||||||
|
|
||||||
|
data, _ := json.MarshalIndent(app.GetRoute("api"), "", " ")
|
||||||
|
fmt.Print(string(data))
|
||||||
|
// Prints:
|
||||||
|
// {
|
||||||
|
// "method": "GET",
|
||||||
|
// "name": "api",
|
||||||
|
// "path": "/api/*",
|
||||||
|
// "params": [
|
||||||
|
// "*1"
|
||||||
|
// ]
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
log.Fatal(app.Listen(":3000"))
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
#### 📖 [**Sirviendo Archivos Estáticos**](https://docs.gofiber.io/api/app#static)
|
#### 📖 [**Sirviendo Archivos Estáticos**](https://docs.gofiber.io/api/app#static)
|
||||||
|
|
||||||
```go
|
```go
|
||||||
|
|
|
@ -240,6 +240,41 @@ func main() {
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div dir="ltr" >
|
||||||
|
|
||||||
|
#### 📖 [**Route Naming**](https://docs.gofiber.io/api/app#name)
|
||||||
|
|
||||||
|
```go
|
||||||
|
func main() {
|
||||||
|
app := fiber.New()
|
||||||
|
|
||||||
|
// GET /api/register
|
||||||
|
app.Get("/api/*", func(c *fiber.Ctx) error {
|
||||||
|
msg := fmt.Sprintf("✋ %s", c.Params("*"))
|
||||||
|
return c.SendString(msg) // => ✋ register
|
||||||
|
}).Name("api")
|
||||||
|
|
||||||
|
data, _ := json.MarshalIndent(app.GetRoute("api"), "", " ")
|
||||||
|
fmt.Print(string(data))
|
||||||
|
// Prints:
|
||||||
|
// {
|
||||||
|
// "method": "GET",
|
||||||
|
// "name": "api",
|
||||||
|
// "path": "/api/*",
|
||||||
|
// "params": [
|
||||||
|
// "*1"
|
||||||
|
// ]
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
log.Fatal(app.Listen(":3000"))
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
#### 📖 [**Serving Static Files**](https://docs.gofiber.io/api/app#static)
|
#### 📖 [**Serving Static Files**](https://docs.gofiber.io/api/app#static)
|
||||||
|
|
||||||
<div dir="ltr">
|
<div dir="ltr">
|
||||||
|
|
|
@ -191,6 +191,36 @@ func main() {
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### 📖 [**Route Naming**](https://docs.gofiber.io/api/app#name)
|
||||||
|
|
||||||
|
```go
|
||||||
|
func main() {
|
||||||
|
app := fiber.New()
|
||||||
|
|
||||||
|
// GET /api/register
|
||||||
|
app.Get("/api/*", func(c *fiber.Ctx) error {
|
||||||
|
msg := fmt.Sprintf("✋ %s", c.Params("*"))
|
||||||
|
return c.SendString(msg) // => ✋ register
|
||||||
|
}).Name("api")
|
||||||
|
|
||||||
|
data, _ := json.MarshalIndent(app.GetRoute("api"), "", " ")
|
||||||
|
fmt.Print(string(data))
|
||||||
|
// Prints:
|
||||||
|
// {
|
||||||
|
// "method": "GET",
|
||||||
|
// "name": "api",
|
||||||
|
// "path": "/api/*",
|
||||||
|
// "params": [
|
||||||
|
// "*1"
|
||||||
|
// ]
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
log.Fatal(app.Listen(":3000"))
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
#### 📖 [**Serving Static Files**](https://docs.gofiber.io/api/app#static)
|
#### 📖 [**Serving Static Files**](https://docs.gofiber.io/api/app#static)
|
||||||
|
|
||||||
```go
|
```go
|
||||||
|
|
|
@ -246,6 +246,40 @@ func main() {
|
||||||
|
|
||||||
<div dir="rtl">
|
<div dir="rtl">
|
||||||
|
|
||||||
|
#### 📖 [**Route Naming**](https://docs.gofiber.io/api/app#name)
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
```go
|
||||||
|
func main() {
|
||||||
|
app := fiber.New()
|
||||||
|
|
||||||
|
// GET /api/register
|
||||||
|
app.Get("/api/*", func(c *fiber.Ctx) error {
|
||||||
|
msg := fmt.Sprintf("✋ %s", c.Params("*"))
|
||||||
|
return c.SendString(msg) // => ✋ register
|
||||||
|
}).Name("api")
|
||||||
|
|
||||||
|
data, _ := json.MarshalIndent(app.GetRoute("api"), "", " ")
|
||||||
|
fmt.Print(string(data))
|
||||||
|
// Prints:
|
||||||
|
// {
|
||||||
|
// "method": "GET",
|
||||||
|
// "name": "api",
|
||||||
|
// "path": "/api/*",
|
||||||
|
// "params": [
|
||||||
|
// "*1"
|
||||||
|
// ]
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
log.Fatal(app.Listen(":3000"))
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
<div dir="rtl">
|
||||||
|
|
||||||
#### 📖 [**Serving Static Files**](https://docs.gofiber.io/api/app#static)
|
#### 📖 [**Serving Static Files**](https://docs.gofiber.io/api/app#static)
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -191,6 +191,36 @@ func main() {
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### 📖 [**Route Naming**](https://docs.gofiber.io/api/app#name)
|
||||||
|
|
||||||
|
```go
|
||||||
|
func main() {
|
||||||
|
app := fiber.New()
|
||||||
|
|
||||||
|
// GET /api/register
|
||||||
|
app.Get("/api/*", func(c *fiber.Ctx) error {
|
||||||
|
msg := fmt.Sprintf("✋ %s", c.Params("*"))
|
||||||
|
return c.SendString(msg) // => ✋ register
|
||||||
|
}).Name("api")
|
||||||
|
|
||||||
|
data, _ := json.MarshalIndent(app.GetRoute("api"), "", " ")
|
||||||
|
fmt.Print(string(data))
|
||||||
|
// Prints:
|
||||||
|
// {
|
||||||
|
// "method": "GET",
|
||||||
|
// "name": "api",
|
||||||
|
// "path": "/api/*",
|
||||||
|
// "params": [
|
||||||
|
// "*1"
|
||||||
|
// ]
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
log.Fatal(app.Listen(":3000"))
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
#### 📖 [**Serving File Static**](https://docs.gofiber.io/api/app#static)
|
#### 📖 [**Serving File Static**](https://docs.gofiber.io/api/app#static)
|
||||||
|
|
||||||
```go
|
```go
|
||||||
|
|
|
@ -190,6 +190,36 @@ func main() {
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### 📖 [**Route Naming**](https://docs.gofiber.io/api/app#name)
|
||||||
|
|
||||||
|
```go
|
||||||
|
func main() {
|
||||||
|
app := fiber.New()
|
||||||
|
|
||||||
|
// GET /api/register
|
||||||
|
app.Get("/api/*", func(c *fiber.Ctx) error {
|
||||||
|
msg := fmt.Sprintf("✋ %s", c.Params("*"))
|
||||||
|
return c.SendString(msg) // => ✋ register
|
||||||
|
}).Name("api")
|
||||||
|
|
||||||
|
data, _ := json.MarshalIndent(app.GetRoute("api"), "", " ")
|
||||||
|
fmt.Print(string(data))
|
||||||
|
// Prints:
|
||||||
|
// {
|
||||||
|
// "method": "GET",
|
||||||
|
// "name": "api",
|
||||||
|
// "path": "/api/*",
|
||||||
|
// "params": [
|
||||||
|
// "*1"
|
||||||
|
// ]
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
log.Fatal(app.Listen(":3000"))
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
#### 📖 [**Servire File Statici**](https://docs.gofiber.io/api/app#static)
|
#### 📖 [**Servire File Statici**](https://docs.gofiber.io/api/app#static)
|
||||||
|
|
||||||
```go
|
```go
|
||||||
|
|
|
@ -194,6 +194,36 @@ func main() {
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### 📖 [**Route Naming**](https://docs.gofiber.io/api/app#name)
|
||||||
|
|
||||||
|
```go
|
||||||
|
func main() {
|
||||||
|
app := fiber.New()
|
||||||
|
|
||||||
|
// GET /api/register
|
||||||
|
app.Get("/api/*", func(c *fiber.Ctx) error {
|
||||||
|
msg := fmt.Sprintf("✋ %s", c.Params("*"))
|
||||||
|
return c.SendString(msg) // => ✋ register
|
||||||
|
}).Name("api")
|
||||||
|
|
||||||
|
data, _ := json.MarshalIndent(app.GetRoute("api"), "", " ")
|
||||||
|
fmt.Print(string(data))
|
||||||
|
// Prints:
|
||||||
|
// {
|
||||||
|
// "method": "GET",
|
||||||
|
// "name": "api",
|
||||||
|
// "path": "/api/*",
|
||||||
|
// "params": [
|
||||||
|
// "*1"
|
||||||
|
// ]
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
log.Fatal(app.Listen(":3000"))
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
#### 📖 [**静的ファイルの提供**](https://docs.gofiber.io/api/app#static)
|
#### 📖 [**静的ファイルの提供**](https://docs.gofiber.io/api/app#static)
|
||||||
|
|
||||||
```go
|
```go
|
||||||
|
|
|
@ -195,6 +195,36 @@ func main() {
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### 📖 [**Route Naming**](https://docs.gofiber.io/api/app#name)
|
||||||
|
|
||||||
|
```go
|
||||||
|
func main() {
|
||||||
|
app := fiber.New()
|
||||||
|
|
||||||
|
// GET /api/register
|
||||||
|
app.Get("/api/*", func(c *fiber.Ctx) error {
|
||||||
|
msg := fmt.Sprintf("✋ %s", c.Params("*"))
|
||||||
|
return c.SendString(msg) // => ✋ register
|
||||||
|
}).Name("api")
|
||||||
|
|
||||||
|
data, _ := json.MarshalIndent(app.GetRoute("api"), "", " ")
|
||||||
|
fmt.Print(string(data))
|
||||||
|
// Prints:
|
||||||
|
// {
|
||||||
|
// "method": "GET",
|
||||||
|
// "name": "api",
|
||||||
|
// "path": "/api/*",
|
||||||
|
// "params": [
|
||||||
|
// "*1"
|
||||||
|
// ]
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
log.Fatal(app.Listen(":3000"))
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
#### 📖 [**Serving Static Files**](https://docs.gofiber.io/api/app#static)
|
#### 📖 [**Serving Static Files**](https://docs.gofiber.io/api/app#static)
|
||||||
|
|
||||||
```go
|
```go
|
||||||
|
|
|
@ -195,6 +195,36 @@ func main() {
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### 📖 [**Route Naming**](https://docs.gofiber.io/api/app#name)
|
||||||
|
|
||||||
|
```go
|
||||||
|
func main() {
|
||||||
|
app := fiber.New()
|
||||||
|
|
||||||
|
// GET /api/register
|
||||||
|
app.Get("/api/*", func(c *fiber.Ctx) error {
|
||||||
|
msg := fmt.Sprintf("✋ %s", c.Params("*"))
|
||||||
|
return c.SendString(msg) // => ✋ register
|
||||||
|
}).Name("api")
|
||||||
|
|
||||||
|
data, _ := json.MarshalIndent(app.GetRoute("api"), "", " ")
|
||||||
|
fmt.Print(string(data))
|
||||||
|
// Prints:
|
||||||
|
// {
|
||||||
|
// "method": "GET",
|
||||||
|
// "name": "api",
|
||||||
|
// "path": "/api/*",
|
||||||
|
// "params": [
|
||||||
|
// "*1"
|
||||||
|
// ]
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
log.Fatal(app.Listen(":3000"))
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
#### 📖 [**Serving Static Files**](https://docs.gofiber.io/api/app#static)
|
#### 📖 [**Serving Static Files**](https://docs.gofiber.io/api/app#static)
|
||||||
|
|
||||||
```go
|
```go
|
||||||
|
|
|
@ -191,6 +191,36 @@ func main() {
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### 📖 [**Route Naming**](https://docs.gofiber.io/api/app#name)
|
||||||
|
|
||||||
|
```go
|
||||||
|
func main() {
|
||||||
|
app := fiber.New()
|
||||||
|
|
||||||
|
// GET /api/register
|
||||||
|
app.Get("/api/*", func(c *fiber.Ctx) error {
|
||||||
|
msg := fmt.Sprintf("✋ %s", c.Params("*"))
|
||||||
|
return c.SendString(msg) // => ✋ register
|
||||||
|
}).Name("api")
|
||||||
|
|
||||||
|
data, _ := json.MarshalIndent(app.GetRoute("api"), "", " ")
|
||||||
|
fmt.Print(string(data))
|
||||||
|
// Prints:
|
||||||
|
// {
|
||||||
|
// "method": "GET",
|
||||||
|
// "name": "api",
|
||||||
|
// "path": "/api/*",
|
||||||
|
// "params": [
|
||||||
|
// "*1"
|
||||||
|
// ]
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
log.Fatal(app.Listen(":3000"))
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
#### 📖 [**Servindo arquivos estáticos**](https://docs.gofiber.io/api/app#static)
|
#### 📖 [**Servindo arquivos estáticos**](https://docs.gofiber.io/api/app#static)
|
||||||
|
|
||||||
```go
|
```go
|
||||||
|
|
|
@ -191,6 +191,36 @@ func main() {
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### 📖 [**Route Naming**](https://docs.gofiber.io/api/app#name)
|
||||||
|
|
||||||
|
```go
|
||||||
|
func main() {
|
||||||
|
app := fiber.New()
|
||||||
|
|
||||||
|
// GET /api/register
|
||||||
|
app.Get("/api/*", func(c *fiber.Ctx) error {
|
||||||
|
msg := fmt.Sprintf("✋ %s", c.Params("*"))
|
||||||
|
return c.SendString(msg) // => ✋ register
|
||||||
|
}).Name("api")
|
||||||
|
|
||||||
|
data, _ := json.MarshalIndent(app.GetRoute("api"), "", " ")
|
||||||
|
fmt.Print(string(data))
|
||||||
|
// Prints:
|
||||||
|
// {
|
||||||
|
// "method": "GET",
|
||||||
|
// "name": "api",
|
||||||
|
// "path": "/api/*",
|
||||||
|
// "params": [
|
||||||
|
// "*1"
|
||||||
|
// ]
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
log.Fatal(app.Listen(":3000"))
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
#### 📖 [**Serving Static Files**](https://docs.gofiber.io/api/app#static)
|
#### 📖 [**Serving Static Files**](https://docs.gofiber.io/api/app#static)
|
||||||
|
|
||||||
```go
|
```go
|
||||||
|
|
|
@ -209,6 +209,40 @@ func main() {
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div dir="ltr" >
|
||||||
|
|
||||||
|
#### 📖 [**Route Naming**](https://docs.gofiber.io/api/app#name)
|
||||||
|
|
||||||
|
```go
|
||||||
|
func main() {
|
||||||
|
app := fiber.New()
|
||||||
|
|
||||||
|
// GET /api/register
|
||||||
|
app.Get("/api/*", func(c *fiber.Ctx) error {
|
||||||
|
msg := fmt.Sprintf("✋ %s", c.Params("*"))
|
||||||
|
return c.SendString(msg) // => ✋ register
|
||||||
|
}).Name("api")
|
||||||
|
|
||||||
|
data, _ := json.MarshalIndent(app.GetRoute("api"), "", " ")
|
||||||
|
fmt.Print(string(data))
|
||||||
|
// Prints:
|
||||||
|
// {
|
||||||
|
// "method": "GET",
|
||||||
|
// "name": "api",
|
||||||
|
// "path": "/api/*",
|
||||||
|
// "params": [
|
||||||
|
// "*1"
|
||||||
|
// ]
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
log.Fatal(app.Listen(":3000"))
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
#### 📖 [**Serving Static Files**](https://docs.gofiber.io/api/app#static)
|
#### 📖 [**Serving Static Files**](https://docs.gofiber.io/api/app#static)
|
||||||
|
|
||||||
<div dir="ltr">
|
<div dir="ltr">
|
||||||
|
|
|
@ -190,6 +190,36 @@ func main() {
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### 📖 [**Route İsimlendirmesi**](https://docs.gofiber.io/api/app#name)
|
||||||
|
|
||||||
|
```go
|
||||||
|
func main() {
|
||||||
|
app := fiber.New()
|
||||||
|
|
||||||
|
// GET /api/register
|
||||||
|
app.Get("/api/*", func(c *fiber.Ctx) error {
|
||||||
|
msg := fmt.Sprintf("✋ %s", c.Params("*"))
|
||||||
|
return c.SendString(msg) // => ✋ kayit
|
||||||
|
}).Name("api")
|
||||||
|
|
||||||
|
data, _ := json.MarshalIndent(app.GetRoute("api"), "", " ")
|
||||||
|
fmt.Print(string(data))
|
||||||
|
// Cikti:
|
||||||
|
// {
|
||||||
|
// "method": "GET",
|
||||||
|
// "name": "api",
|
||||||
|
// "path": "/api/*",
|
||||||
|
// "params": [
|
||||||
|
// "*1"
|
||||||
|
// ]
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
log.Fatal(app.Listen(":3000"))
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
#### 📖 [**Statik Dosya Sunumu**](https://docs.gofiber.io/api/app#static)
|
#### 📖 [**Statik Dosya Sunumu**](https://docs.gofiber.io/api/app#static)
|
||||||
|
|
||||||
```go
|
```go
|
||||||
|
|
|
@ -191,6 +191,36 @@ func main() {
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### 📖 [**Route Naming**](https://docs.gofiber.io/api/app#name)
|
||||||
|
|
||||||
|
```go
|
||||||
|
func main() {
|
||||||
|
app := fiber.New()
|
||||||
|
|
||||||
|
// GET /api/register
|
||||||
|
app.Get("/api/*", func(c *fiber.Ctx) error {
|
||||||
|
msg := fmt.Sprintf("✋ %s", c.Params("*"))
|
||||||
|
return c.SendString(msg) // => ✋ register
|
||||||
|
}).Name("api")
|
||||||
|
|
||||||
|
data, _ := json.MarshalIndent(app.GetRoute("api"), "", " ")
|
||||||
|
fmt.Print(string(data))
|
||||||
|
// Prints:
|
||||||
|
// {
|
||||||
|
// "method": "GET",
|
||||||
|
// "name": "api",
|
||||||
|
// "path": "/api/*",
|
||||||
|
// "params": [
|
||||||
|
// "*1"
|
||||||
|
// ]
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
log.Fatal(app.Listen(":3000"))
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
#### 📖 [**静态文件**](https://docs.gofiber.io/api/app#static)服务
|
#### 📖 [**静态文件**](https://docs.gofiber.io/api/app#static)服务
|
||||||
|
|
||||||
```go
|
```go
|
||||||
|
|
|
@ -193,6 +193,36 @@ func main() {
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### 📖 [**Route Naming**](https://docs.gofiber.io/api/app#name)
|
||||||
|
|
||||||
|
```go
|
||||||
|
func main() {
|
||||||
|
app := fiber.New()
|
||||||
|
|
||||||
|
// GET /api/register
|
||||||
|
app.Get("/api/*", func(c *fiber.Ctx) error {
|
||||||
|
msg := fmt.Sprintf("✋ %s", c.Params("*"))
|
||||||
|
return c.SendString(msg) // => ✋ register
|
||||||
|
}).Name("api")
|
||||||
|
|
||||||
|
data, _ := json.MarshalIndent(app.GetRoute("api"), "", " ")
|
||||||
|
fmt.Print(string(data))
|
||||||
|
// Prints:
|
||||||
|
// {
|
||||||
|
// "method": "GET",
|
||||||
|
// "name": "api",
|
||||||
|
// "path": "/api/*",
|
||||||
|
// "params": [
|
||||||
|
// "*1"
|
||||||
|
// ]
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
log.Fatal(app.Listen(":3000"))
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
#### 📖 [**Serving Static Files**](https://docs.gofiber.io/api/app#static)
|
#### 📖 [**Serving Static Files**](https://docs.gofiber.io/api/app#static)
|
||||||
|
|
||||||
```go
|
```go
|
||||||
|
|
32
app.go
32
app.go
|
@ -398,6 +398,14 @@ const (
|
||||||
DefaultCompressedFileSuffix = ".fiber.gz"
|
DefaultCompressedFileSuffix = ".fiber.gz"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Variables for Name & GetRoute
|
||||||
|
var latestRoute struct {
|
||||||
|
route *Route
|
||||||
|
mu sync.Mutex
|
||||||
|
}
|
||||||
|
|
||||||
|
var latestGroup Group
|
||||||
|
|
||||||
// DefaultErrorHandler that process return errors from handlers
|
// DefaultErrorHandler that process return errors from handlers
|
||||||
var DefaultErrorHandler = func(c *Ctx, err error) error {
|
var DefaultErrorHandler = func(c *Ctx, err error) error {
|
||||||
code := StatusInternalServerError
|
code := StatusInternalServerError
|
||||||
|
@ -537,6 +545,30 @@ func (app *App) Mount(prefix string, fiber *App) Router {
|
||||||
return app
|
return app
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Assign name to specific route.
|
||||||
|
func (app *App) Name(name string) Router {
|
||||||
|
if strings.HasPrefix(latestRoute.route.path, latestGroup.prefix) {
|
||||||
|
latestRoute.route.Name = latestGroup.name + name
|
||||||
|
} else {
|
||||||
|
latestRoute.route.Name = name
|
||||||
|
}
|
||||||
|
|
||||||
|
return app
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get route by name
|
||||||
|
func (app *App) GetRoute(name string) Route {
|
||||||
|
for _, routes := range app.stack {
|
||||||
|
for _, route := range routes {
|
||||||
|
if route.Name == name {
|
||||||
|
return *route
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Route{}
|
||||||
|
}
|
||||||
|
|
||||||
// Use registers a middleware route that will match requests
|
// Use registers a middleware route that will match requests
|
||||||
// with the provided prefix (which is optional and defaults to "/").
|
// with the provided prefix (which is optional and defaults to "/").
|
||||||
//
|
//
|
||||||
|
|
25
app_test.go
25
app_test.go
|
@ -519,6 +519,31 @@ func Test_App_Methods(t *testing.T) {
|
||||||
testStatus200(t, app, "/john/doe", MethodGet)
|
testStatus200(t, app, "/john/doe", MethodGet)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Test_App_Route_Naming(t *testing.T) {
|
||||||
|
app := New()
|
||||||
|
handler := func(c *Ctx) error {
|
||||||
|
return c.SendStatus(StatusOK)
|
||||||
|
}
|
||||||
|
app.Get("/john", handler).Name("john")
|
||||||
|
app.Delete("/doe", handler)
|
||||||
|
app.Name("doe")
|
||||||
|
|
||||||
|
jane := app.Group("/jane").Name("jane.")
|
||||||
|
jane.Get("/test", handler).Name("test")
|
||||||
|
jane.Trace("/trace", handler).Name("trace")
|
||||||
|
|
||||||
|
group := app.Group("/group")
|
||||||
|
group.Get("/test", handler).Name("test")
|
||||||
|
|
||||||
|
app.Post("/post", handler).Name("post")
|
||||||
|
|
||||||
|
utils.AssertEqual(t, "post", app.GetRoute("post").Name)
|
||||||
|
utils.AssertEqual(t, "john", app.GetRoute("john").Name)
|
||||||
|
utils.AssertEqual(t, "jane.test", app.GetRoute("jane.test").Name)
|
||||||
|
utils.AssertEqual(t, "jane.trace", app.GetRoute("jane.trace").Name)
|
||||||
|
utils.AssertEqual(t, "test", app.GetRoute("test").Name)
|
||||||
|
}
|
||||||
|
|
||||||
func Test_App_New(t *testing.T) {
|
func Test_App_New(t *testing.T) {
|
||||||
app := New()
|
app := New()
|
||||||
app.Get("/", testEmptyHandler)
|
app.Get("/", testEmptyHandler)
|
||||||
|
|
|
@ -656,7 +656,7 @@ func (a *Agent) Reuse() *Agent {
|
||||||
func (a *Agent) InsecureSkipVerify() *Agent {
|
func (a *Agent) InsecureSkipVerify() *Agent {
|
||||||
if a.HostClient.TLSConfig == nil {
|
if a.HostClient.TLSConfig == nil {
|
||||||
/* #nosec G402 */
|
/* #nosec G402 */
|
||||||
a.HostClient.TLSConfig = &tls.Config{InsecureSkipVerify: true}
|
a.HostClient.TLSConfig = &tls.Config{InsecureSkipVerify: true} // #nosec G402
|
||||||
} else {
|
} else {
|
||||||
/* #nosec G402 */
|
/* #nosec G402 */
|
||||||
a.HostClient.TLSConfig.InsecureSkipVerify = true
|
a.HostClient.TLSConfig.InsecureSkipVerify = true
|
||||||
|
|
9
group.go
9
group.go
|
@ -14,6 +14,7 @@ import (
|
||||||
type Group struct {
|
type Group struct {
|
||||||
app *App
|
app *App
|
||||||
prefix string
|
prefix string
|
||||||
|
name string
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mount attaches another app instance as a sub-router along a routing path.
|
// Mount attaches another app instance as a sub-router along a routing path.
|
||||||
|
@ -33,6 +34,14 @@ func (grp *Group) Mount(prefix string, fiber *App) Router {
|
||||||
return grp
|
return grp
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Assign name to specific route.
|
||||||
|
func (grp *Group) Name(name string) Router {
|
||||||
|
grp.name = name
|
||||||
|
latestGroup = *grp
|
||||||
|
|
||||||
|
return grp
|
||||||
|
}
|
||||||
|
|
||||||
// Use registers a middleware route that will match requests
|
// Use registers a middleware route that will match requests
|
||||||
// with the provided prefix (which is optional and defaults to "/").
|
// with the provided prefix (which is optional and defaults to "/").
|
||||||
//
|
//
|
||||||
|
|
|
@ -68,7 +68,8 @@ func getTlsConfig(ln net.Listener) *tls.Config {
|
||||||
// Get private field from value
|
// Get private field from value
|
||||||
if field := val.FieldByName("config"); field.Type() != nil {
|
if field := val.FieldByName("config"); field.Type() != nil {
|
||||||
// Copy value from pointer field (unsafe)
|
// Copy value from pointer field (unsafe)
|
||||||
if newval := reflect.NewAt(field.Type(), unsafe.Pointer(field.UnsafeAddr())); newval.Type() != nil {
|
newval := reflect.NewAt(field.Type(), unsafe.Pointer(field.UnsafeAddr())) // #nosec G103
|
||||||
|
if newval.Type() != nil {
|
||||||
// Get element from pointer
|
// Get element from pointer
|
||||||
if elem := newval.Elem(); elem.Type() != nil {
|
if elem := newval.Elem(); elem.Type() != nil {
|
||||||
// Cast value to *tls.Config
|
// Cast value to *tls.Config
|
||||||
|
|
|
@ -79,7 +79,7 @@ func (app *App) prefork(network, addr string, tlsConfig *tls.Config) (err error)
|
||||||
// launch child procs
|
// launch child procs
|
||||||
for i := 0; i < max; i++ {
|
for i := 0; i < max; i++ {
|
||||||
/* #nosec G204 */
|
/* #nosec G204 */
|
||||||
cmd := exec.Command(os.Args[0], os.Args[1:]...)
|
cmd := exec.Command(os.Args[0], os.Args[1:]...) // #nosec G204
|
||||||
if testPreforkMaster {
|
if testPreforkMaster {
|
||||||
// When test prefork master,
|
// When test prefork master,
|
||||||
// just start the child process with a dummy cmd,
|
// just start the child process with a dummy cmd,
|
||||||
|
|
|
@ -37,6 +37,8 @@ type Router interface {
|
||||||
Group(prefix string, handlers ...Handler) Router
|
Group(prefix string, handlers ...Handler) Router
|
||||||
|
|
||||||
Mount(prefix string, fiber *App) Router
|
Mount(prefix string, fiber *App) Router
|
||||||
|
|
||||||
|
Name(name string) Router
|
||||||
}
|
}
|
||||||
|
|
||||||
// Route is a struct that holds all metadata for each registered handler
|
// Route is a struct that holds all metadata for each registered handler
|
||||||
|
@ -51,6 +53,7 @@ type Route struct {
|
||||||
|
|
||||||
// Public fields
|
// Public fields
|
||||||
Method string `json:"method"` // HTTP method
|
Method string `json:"method"` // HTTP method
|
||||||
|
Name string `json:"name"` // Route's name
|
||||||
Path string `json:"path"` // Original registered route path
|
Path string `json:"path"` // Original registered route path
|
||||||
Params []string `json:"params"` // Case sensitive param keys
|
Params []string `json:"params"` // Case sensitive param keys
|
||||||
Handlers []Handler `json:"-"` // Ctx handlers
|
Handlers []Handler `json:"-"` // Ctx handlers
|
||||||
|
@ -425,6 +428,10 @@ func (app *App) addRoute(method string, route *Route) {
|
||||||
app.stack[m] = append(app.stack[m], route)
|
app.stack[m] = append(app.stack[m], route)
|
||||||
app.routesRefreshed = true
|
app.routesRefreshed = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
latestRoute.mu.Lock()
|
||||||
|
latestRoute.route = route
|
||||||
|
latestRoute.mu.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
// buildTree build the prefix tree from the previously registered routes
|
// buildTree build the prefix tree from the previously registered routes
|
||||||
|
|
Loading…
Reference in New Issue