fiber/docs/middleware/adaptor.md

5.4 KiB

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:

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:

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:

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:

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:

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.