mirror of https://github.com/gofiber/fiber.git
186 lines
5.4 KiB
Markdown
186 lines
5.4 KiB
Markdown
---
|
|
id: adaptor
|
|
---
|
|
|
|
# Adaptor
|
|
|
|
The `adaptor` package provides utilities for converting between Fiber and `net/http`. It allows seamless integration of `net/http` handlers, middleware, and requests into Fiber applications, and vice versa.
|
|
|
|
## Features
|
|
|
|
- Convert `net/http` handlers and middleware to Fiber handlers.
|
|
- Convert Fiber handlers to `net/http` handlers.
|
|
- Convert Fiber context (`fiber.Ctx`) into an `http.Request`.
|
|
|
|
## API Reference
|
|
|
|
| Name | Signature | Description |
|
|
|-----------------------------|-------------------------------------------------------------------------------|------------------------------------------------------------------|
|
|
| `HTTPHandler` | `HTTPHandler(h http.Handler) fiber.Handler` | Converts `http.Handler` to `fiber.Handler` |
|
|
| `HTTPHandlerFunc` | `HTTPHandlerFunc(h http.HandlerFunc) fiber.Handler` | Converts `http.HandlerFunc` to `fiber.Handler` |
|
|
| `HTTPMiddleware` | `HTTPMiddleware(mw func(http.Handler) http.Handler) fiber.Handler` | Converts `http.Handler` middleware to `fiber.Handler` middleware |
|
|
| `FiberHandler` | `FiberHandler(h fiber.Handler) http.Handler` | Converts `fiber.Handler` to `http.Handler` |
|
|
| `FiberHandlerFunc` | `FiberHandlerFunc(h fiber.Handler) http.HandlerFunc` | Converts `fiber.Handler` to `http.HandlerFunc` |
|
|
| `FiberApp` | `FiberApp(app *fiber.App) http.HandlerFunc` | Converts an entire Fiber app to a `http.HandlerFunc` |
|
|
| `ConvertRequest` | `ConvertRequest(c fiber.Ctx, forServer bool) (*http.Request, error)` | Converts `fiber.Ctx` into a `http.Request` |
|
|
| `CopyContextToFiberContext` | `CopyContextToFiberContext(context any, requestContext *fasthttp.RequestCtx)` | Copies `context.Context` to `fasthttp.RequestCtx` |
|
|
|
|
---
|
|
|
|
## Usage Examples
|
|
|
|
### 1. Using `net/http` Handlers in Fiber
|
|
|
|
This example demonstrates how to use standard `net/http` handlers inside a Fiber application:
|
|
|
|
```go
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"github.com/gofiber/fiber/v3"
|
|
"github.com/gofiber/fiber/v3/middleware/adaptor"
|
|
)
|
|
|
|
func main() {
|
|
app := fiber.New()
|
|
|
|
// Convert a http.Handler to a Fiber handler
|
|
app.Get("/", adaptor.HTTPHandler(http.HandlerFunc(helloHandler)))
|
|
|
|
app.Listen(":3000")
|
|
}
|
|
|
|
func helloHandler(w http.ResponseWriter, r *http.Request) {
|
|
fmt.Fprint(w, "Hello from net/http!")
|
|
}
|
|
```
|
|
|
|
### 2. Using `net/http` Middleware with Fiber
|
|
|
|
Middleware written for `net/http` can be used in Fiber:
|
|
|
|
```go
|
|
package main
|
|
|
|
import (
|
|
"log"
|
|
"net/http"
|
|
"github.com/gofiber/fiber/v3"
|
|
"github.com/gofiber/fiber/v3/middleware/adaptor"
|
|
)
|
|
|
|
func main() {
|
|
app := fiber.New()
|
|
|
|
// Apply a http middleware in Fiber
|
|
app.Use(adaptor.HTTPMiddleware(loggingMiddleware))
|
|
|
|
app.Get("/", func(c fiber.Ctx) error {
|
|
return c.SendString("Hello Fiber!")
|
|
})
|
|
|
|
app.Listen(":3000")
|
|
}
|
|
|
|
func loggingMiddleware(next http.Handler) http.Handler {
|
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
log.Println("Request received")
|
|
next.ServeHTTP(w, r)
|
|
})
|
|
}
|
|
```
|
|
|
|
### 3. Using Fiber Handlers in `net/http`
|
|
|
|
You can embed Fiber handlers inside `net/http`:
|
|
|
|
```go
|
|
package main
|
|
|
|
import (
|
|
"net/http"
|
|
"github.com/gofiber/fiber/v3"
|
|
"github.com/gofiber/fiber/v3/middleware/adaptor"
|
|
)
|
|
|
|
func main() {
|
|
// Convert Fiber handler to an http.Handler
|
|
http.Handle("/", adaptor.FiberHandler(helloFiber))
|
|
|
|
// Convert Fiber handler to http.HandlerFunc
|
|
http.HandleFunc("/func", adaptor.FiberHandlerFunc(helloFiber))
|
|
|
|
http.ListenAndServe(":3000", nil)
|
|
}
|
|
|
|
func helloFiber(c fiber.Ctx) error {
|
|
return c.SendString("Hello from Fiber!")
|
|
}
|
|
```
|
|
|
|
### 4. Running a Fiber App in `net/http`
|
|
|
|
You can wrap a full Fiber app inside `net/http`:
|
|
|
|
```go
|
|
package main
|
|
|
|
import (
|
|
"net/http"
|
|
"github.com/gofiber/fiber/v3"
|
|
"github.com/gofiber/fiber/v3/middleware/adaptor"
|
|
)
|
|
|
|
func main() {
|
|
app := fiber.New()
|
|
app.Get("/", func(c fiber.Ctx) error {
|
|
return c.SendString("Hello from Fiber!")
|
|
})
|
|
|
|
// Run Fiber inside an http server
|
|
http.ListenAndServe(":3000", adaptor.FiberApp(app))
|
|
}
|
|
```
|
|
|
|
### 5. Converting Fiber Context (`fiber.Ctx`) to `http.Request`
|
|
|
|
If you need to use a `http.Request` inside a Fiber handler:
|
|
|
|
```go
|
|
package main
|
|
|
|
import (
|
|
"net/http"
|
|
"github.com/gofiber/fiber/v3"
|
|
"github.com/gofiber/fiber/v3/middleware/adaptor"
|
|
)
|
|
|
|
func main() {
|
|
app := fiber.New()
|
|
app.Get("/request", handleRequest)
|
|
app.Listen(":3000")
|
|
}
|
|
|
|
func handleRequest(c fiber.Ctx) error {
|
|
httpReq, err := adaptor.ConvertRequest(c, false)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return c.SendString("Converted Request URL: " + httpReq.URL.String())
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Summary
|
|
|
|
The `adaptor` package allows easy interoperation between Fiber and `net/http`. You can:
|
|
|
|
- Convert handlers and middleware in both directions.
|
|
- Run Fiber apps inside `net/http`.
|
|
- Convert `fiber.Ctx` to `http.Request`.
|
|
|
|
This makes it simple to integrate Fiber with existing Go projects or migrate between frameworks as needed.
|