mirror of
https://github.com/gofiber/fiber.git
synced 2025-02-22 09:53:24 +00:00
🔥 Feature: Add Skip middleware (#1465)
* add Skip middleware * middleware/skip: fix test expectations
This commit is contained in:
parent
846d5a5b38
commit
5f1acd3c56
26
middleware/skip/README.md
Normal file
26
middleware/skip/README.md
Normal file
@ -0,0 +1,26 @@
|
||||
# Skip
|
||||
Skip middleware for [Fiber](https://github.com/gofiber/fiber) that skips a wrapped handler is a predicate is true.
|
||||
|
||||
### Table of Contents
|
||||
- [Signatures](#signatures)
|
||||
- [Examples](#examples)
|
||||
|
||||
|
||||
### Signatures
|
||||
```go
|
||||
func New(handler fiber.Handler, exclude func(c *fiber.Ctx) bool) fiber.Handler
|
||||
```
|
||||
|
||||
### Examples
|
||||
Import the middleware package that is part of the Fiber web framework
|
||||
```go
|
||||
import (
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"github.com/gofiber/fiber/v2/middleware/skip"
|
||||
)
|
||||
```
|
||||
|
||||
After you initiate your Fiber app, you can use the following possibilities:
|
||||
```go
|
||||
app.Use(skip.New(handler), func(ctx *fiber.Ctx) bool { return ctx.Method() == fiber.MethodOptions })
|
||||
```
|
19
middleware/skip/skip.go
Normal file
19
middleware/skip/skip.go
Normal file
@ -0,0 +1,19 @@
|
||||
package skip
|
||||
|
||||
import "github.com/gofiber/fiber/v2"
|
||||
|
||||
// New creates a middleware handler which skips the wrapped handler
|
||||
// if the exclude predicate returns true.
|
||||
func New(handler fiber.Handler, exclude func(c *fiber.Ctx) bool) fiber.Handler {
|
||||
if exclude == nil {
|
||||
return handler
|
||||
}
|
||||
|
||||
return func(c *fiber.Ctx) error {
|
||||
if exclude(c) {
|
||||
return c.Next()
|
||||
}
|
||||
|
||||
return handler(c)
|
||||
}
|
||||
}
|
54
middleware/skip/skip_test.go
Normal file
54
middleware/skip/skip_test.go
Normal file
@ -0,0 +1,54 @@
|
||||
package skip_test
|
||||
|
||||
import (
|
||||
"net/http/httptest"
|
||||
"testing"
|
||||
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"github.com/gofiber/fiber/v2/middleware/skip"
|
||||
"github.com/gofiber/fiber/v2/utils"
|
||||
)
|
||||
|
||||
// go test -run Test_Skip
|
||||
func Test_Skip(t *testing.T) {
|
||||
app := fiber.New()
|
||||
|
||||
app.Use(skip.New(errTeapotHandler, func(*fiber.Ctx) bool { return true }))
|
||||
app.Get("/", helloWorldHandler)
|
||||
|
||||
resp, err := app.Test(httptest.NewRequest("GET", "/", nil))
|
||||
utils.AssertEqual(t, nil, err)
|
||||
utils.AssertEqual(t, fiber.StatusOK, resp.StatusCode)
|
||||
}
|
||||
|
||||
// go test -run Test_SkipFalse
|
||||
func Test_SkipFalse(t *testing.T) {
|
||||
app := fiber.New()
|
||||
|
||||
app.Use(skip.New(errTeapotHandler, func(*fiber.Ctx) bool { return false }))
|
||||
app.Get("/", helloWorldHandler)
|
||||
|
||||
resp, err := app.Test(httptest.NewRequest("GET", "/", nil))
|
||||
utils.AssertEqual(t, nil, err)
|
||||
utils.AssertEqual(t, fiber.StatusTeapot, resp.StatusCode)
|
||||
}
|
||||
|
||||
// go test -run Test_SkipNilFunc
|
||||
func Test_SkipNilFunc(t *testing.T) {
|
||||
app := fiber.New()
|
||||
|
||||
app.Use(skip.New(errTeapotHandler, nil))
|
||||
app.Get("/", helloWorldHandler)
|
||||
|
||||
resp, err := app.Test(httptest.NewRequest("GET", "/", nil))
|
||||
utils.AssertEqual(t, nil, err)
|
||||
utils.AssertEqual(t, fiber.StatusTeapot, resp.StatusCode)
|
||||
}
|
||||
|
||||
func helloWorldHandler(c *fiber.Ctx) error {
|
||||
return c.SendString("Hello, World 👋!")
|
||||
}
|
||||
|
||||
func errTeapotHandler(*fiber.Ctx) error {
|
||||
return fiber.ErrTeapot
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user