# README
Middlewares
-
Cyclops supports middlewares and few middlewares come pre-included with the project and they are:
- CORS
- Panic Handler
- Request Logger
- Set Secure Headers with every request
- Set Default Headers with every request
-
Out of the above middlewares, PanicHandler and RequestLogger are enabled by default
-
You can also add your own custom middlewares, the only thing to take care of when writing custom middlewares is that the function should take in
http.Handler
as a parameter and returnhttp.Handler
Using CORS Middleware
Cyclops supports CORS and can be used as explained below
package main
import (
"fmt"
"github.com/flannel-dev-lab/cyclops/v2"
"github.com/flannel-dev-lab/cyclops/v2/middleware"
"github.com/flannel-dev-lab/cyclops/v2/router"
"html/template"
"net/http"
"time"
)
func main() {
cors := middleware.CORS{
AllowedOrigin: "https://www.admin.yombu.com",
AllowedHeaders: []string{"Content-Type", "referrer", "referrer-type"},
AllowedMethods: []string{"GET", "POST"},
AllowedCredentials: true,
ExposedHeaders: []string{"GET"},
MaxAge: 100,
}
routerObj := router.New()
routerObj.Get("/", middleware.NewChain(cors.CORSHandler).Then(Login))
cyclops.StartServer(":8080", routerObj)
}
func Login(w http.ResponseWriter, r *http.Request) {
response.SuccessResponse(200, w, nil)
}
Setting Default Headers with every request
package main
import (
"fmt"
"github.com/flannel-dev-lab/cyclops/v2/"
"github.com/flannel-dev-lab/cyclops/v2/middleware"
"github.com/flannel-dev-lab/cyclops/v2/response"
"github.com/flannel-dev-lab/cyclops/v2/router"
"net/http"
)
func main() {
~~defaultHeaders := middleware.DefaultHeaders{
ContentType: "application/json",
}~~
routerObj := router.New()
routerObj.Get("/", middleware.NewChain(DefaultHeaders.DefaultHeaders).Then(Login))
cyclops.StartServer(":8080", routerObj)
}
func Login(w http.ResponseWriter, r *http.Request) {
response.SuccessResponse(200, w, nil)
}
When we run the above code, the response header Content-Type: application/json
is set with every request
Middleware Chaining
If you want to use multiple middlewares for a request, cyclops allows you to do that as well. All you need to do is like below:
middleware.NewChain(defaultHeaders.DefaultHeaders, cors.CORSHandler).Then(http.HandlerFunc(Login))
# Functions
accessLogger is used to log access logs for discover service.
NewChain takes a variable number of middleware's and adds them to chain and returns a pointer to Chain.
NewLoggingResponseWriter Creates a reference loggingResponseWriter.
PanicHandler takes care of recovering from panic if any unforseen error occurs in the execution logic and makes sure that the server does not stop.
# Structs
Chain contains a slice of middleware for the request.
Contains all the CORS configurations.
DefaultHeaders lets you manage a set of default headers as per mozilla spec https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Expose-Headers.
No description provided by the author
# Type aliases
A type signature for middlewaretype Middlewares func(http.Handler) http.Handler.