Dzi*_*ars 1 routes go mux gorilla
我有单独的文件routes.go(包路由),我存储我的所有路由和处理程序.但我想将此文件拆分为2个文件.我想将我的routes.go重命名为main.go并创建新的附加文件moduleX.go(包路由).我怎样才能做到这一点?我想将所有路由存储在相同"包路由"的多个文件中.
package routes
import (
"github.com/gorilla/mux"
"net/http"
"github.com/---/001/models"
"github.com/---/001/sessions"
"github.com/---/001/utils"
"github.com/---/001/middleware"
)
func NewRouter() *mux.Router {
r := mux.NewRouter()
r.HandleFunc("/", middleware.AuthRequired(indexGetHandler)).Methods("GET")
r.HandleFunc("/", middleware.AuthRequired(indexPostHandler)).Methods("POST")
r.HandleFunc("/signup", signupGetHandler).Methods("GET")
r.HandleFunc("/signup", signupPostHandler).Methods("POST")
r.HandleFunc("/signin", signinGetHandler).Methods("GET")
r.HandleFunc("/signin", signinPostHandler).Methods("POST")
r.HandleFunc("/signout", signoutGetHandler).Methods("GET")
r.HandleFunc("/services", middleware.AuthRequired(servicesHandler)).Methods("GET")
fs := http.FileServer(http.Dir("./static/"))
r.PathPrefix("/static/").Handler(http.StripPrefix("/static/", fs))
return r
}Run Code Online (Sandbox Code Playgroud)
我想在此主文件之外移动所有"/ signup"和"/ signin"路由和处理程序.然后以某种方式将它们传递回NewRouter函数.你可以给我一本书或一些在线的例子.
lea*_*bop 15
您可以使用另一个修改路由器的功能来执行此操作.
//In another file
func addSignHandler(r *mux.Router) {
r.HandleFunc("/signup", signupGetHandler).Methods("GET")
r.HandleFunc("/signup", signupPostHandler).Methods("POST")
r.HandleFunc("/signin", signinGetHandler).Methods("GET")
r.HandleFunc("/signin", signinPostHandler).Methods("POST")
r.HandleFunc("/signout", signoutGetHandler).Methods("GET")
}
Run Code Online (Sandbox Code Playgroud)
并使用它:
func NewRouter() *mux.Router {
r := mux.NewRouter()
r.HandleFunc("/", middleware.AuthRequired(indexGetHandler)).Methods("GET")
r.HandleFunc("/", middleware.AuthRequired(indexPostHandler)).Methods("POST")
addSignHandler(r)
r.HandleFunc("/services", middleware.AuthRequired(servicesHandler)).Methods("GET")
fs := http.FileServer(http.Dir("./static/"))
r.PathPrefix("/static/").Handler(http.StripPrefix("/static/", fs))
return r
}
Run Code Online (Sandbox Code Playgroud)
或者甚至更好,您可以重构代码以使其更加一致:
func addMainHandler(r *mux.Router) {
r.HandleFunc("/", middleware.AuthRequired(indexGetHandler)).Methods("GET")
r.HandleFunc("/", middleware.AuthRequired(indexPostHandler)).Methods("POST")
r.HandleFunc("/services", middleware.AuthRequired(servicesHandler)).Methods("GET")
fs := http.FileServer(http.Dir("./static/"))
r.PathPrefix("/static/").Handler(http.StripPrefix("/static/", fs))
}
Run Code Online (Sandbox Code Playgroud)
并简化NewRouter为:
func NewRouter() *mux.Router {
r := mux.NewRouter()
addMainHandler(r)
addSignHandler(r)
return r
}
Run Code Online (Sandbox Code Playgroud)