Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

router in Go - run a function before each http request

Tags:

go

routes

I'm using Go with http with Go like this:

mux := http.NewServeMux()
mux.HandleFunc("/API/user", test)
mux.HandleFunc("/authAPI/admin", auth)

and I would like to run a function before every http request and better yet, run a function on every request that has the /authAPI/ in them.
how can I achieve this in Go?

like image 235
Mohsen Shakiba Avatar asked Sep 01 '25 17:09

Mohsen Shakiba


1 Answers

On top of what @Thomas has proposed, you can wrap the whole mux in your own mux that is called before any handler is invoked, and can just invoke handlers of its own. That's how alternative http routers are implemented in go. Example:

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Handled %s", r.RequestURI)
}


func main(){
    // this will do the actual routing, but it's not mandatory, 
    // we can write a custom router if we want
    mux := http.NewServeMux()
    mux.HandleFunc("/foo", handler)
    mux.HandleFunc("/bar", handler)

    // we pass a custom http handler that does preprocessing and calls mux to call the actual handler
    http.ListenAndServe(":8081", http.HandlerFunc(func (w http.ResponseWriter, r *http.Request){
        fmt.Fprintln(w, "Preprocessing yo")
        mux.ServeHTTP(w,r)
    }))
}
like image 67
Not_a_Golfer Avatar answered Sep 04 '25 08:09

Not_a_Golfer