Last active
December 16, 2020 12:36
-
-
Save danesparza/eb3a63ab55a7cd33923e to your computer and use it in GitHub Desktop.
Negroni with Gorilla mux subrouter
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"fmt" | |
"github.com/codegangsta/negroni" | |
"github.com/gorilla/mux" | |
"log" | |
"net/http" | |
) | |
func main() { | |
// Routes: | |
r := mux.NewRouter().StrictSlash(false) | |
// Root 'home' route | |
r.HandleFunc("/", HomeHandler) | |
// To login/logout/signup: | |
// /auth/login | |
// /auth/logout | |
// /auth/signup | |
auth := r.PathPrefix("/auth").Subrouter() | |
auth.Path("/login").HandlerFunc(LoginHandler) | |
auth.Path("/logout").HandlerFunc(LogoutHandler) | |
auth.Path("/signup").HandlerFunc(SignupHandler) | |
// Posts collection | |
posts := r.Path("/posts").Subrouter() | |
posts.Methods("GET").HandlerFunc(PostsIndexHandler) | |
posts.Methods("POST").HandlerFunc(PostsCreateHandler) | |
// Accounts | |
acctBase := mux.NewRouter() | |
r.PathPrefix("/account").Handler(negroni.New( | |
negroni.NewRecovery(), | |
negroni.HandlerFunc(MyMiddleware), | |
negroni.NewLogger(), | |
negroni.Wrap(acctBase), | |
)) | |
acct := acctBase.PathPrefix("/account").Subrouter() | |
acct.Path("/profile").HandlerFunc(ProfileHandler) | |
// Posts singular | |
post := r.PathPrefix("/posts/{id}").Subrouter() | |
post.Methods("GET").Path("/edit").HandlerFunc(PostEditHandler) | |
post.Methods("GET").HandlerFunc(PostShowHandler) | |
post.Methods("PUT", "POST").HandlerFunc(PostUpdateHandler) | |
post.Methods("DELETE").HandlerFunc(PostDeleteHandler) | |
fmt.Println("Starting server on :3000") | |
http.ListenAndServe(":3000", r) | |
} | |
func MyMiddleware(rw http.ResponseWriter, r *http.Request, next http.HandlerFunc) { | |
log.Println("Logging on the way there...") | |
if r.URL.Query().Get("password") == "secret123" { | |
next(rw, r) | |
} else { | |
http.Error(rw, "Not Authorized", 401) | |
} | |
log.Println("Logging on the way back...") | |
} | |
func AcctPrefixHandler(rw http.ResponseWriter, r *http.Request) { | |
log.Println("AcctPrefixHandler...") | |
} | |
func HomeHandler(rw http.ResponseWriter, r *http.Request) { | |
fmt.Fprintln(rw, "Home") | |
} | |
func PostsIndexHandler(rw http.ResponseWriter, r *http.Request) { | |
fmt.Fprintln(rw, "posts index") | |
} | |
func PostsCreateHandler(rw http.ResponseWriter, r *http.Request) { | |
fmt.Fprintln(rw, "posts create") | |
} | |
func PostShowHandler(rw http.ResponseWriter, r *http.Request) { | |
id := mux.Vars(r)["id"] | |
fmt.Fprintln(rw, "showing post", id) | |
} | |
func PostUpdateHandler(rw http.ResponseWriter, r *http.Request) { | |
fmt.Fprintln(rw, "post update") | |
} | |
func PostDeleteHandler(rw http.ResponseWriter, r *http.Request) { | |
fmt.Fprintln(rw, "post delete") | |
} | |
func PostEditHandler(rw http.ResponseWriter, r *http.Request) { | |
fmt.Fprintln(rw, "post edit") | |
} | |
/* Auth handlers */ | |
func LoginHandler(rw http.ResponseWriter, r *http.Request) { | |
fmt.Fprintln(rw, "login") | |
} | |
func LogoutHandler(rw http.ResponseWriter, r *http.Request) { | |
fmt.Fprintln(rw, "logout") | |
} | |
func SignupHandler(rw http.ResponseWriter, r *http.Request) { | |
fmt.Fprintln(rw, "sign up") | |
} | |
func ProfileHandler(rw http.ResponseWriter, r *http.Request) { | |
fmt.Fprintln(rw, "account profile") | |
} | |
func SettingsHandler(rw http.ResponseWriter, r *http.Request) { | |
fmt.Fprintln(rw, "account settings") | |
} |
Thanks
Thanks
Thanks
cheers man!
It still helps, thanks
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
nice