【问题标题】:How to split GO Gorilla Mux routes in 2 separate files of the same package如何在同一个包的 2 个单独文件中拆分 GO Gorilla Mux 路由
【发布时间】:2018-07-14 16:53:55
【问题描述】:

我有单独的文件 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
}

我想将所有“/signup”和“/signin”路由和处理程序移出这个主文件。然后以某种方式将它们传递回这个 NewRouter 函数。 您可以只提供一本书或一些在线示例。

【问题讨论】:

    标签: go routes gorilla mux


    【解决方案1】:

    您可以使用另一个修改路由器的功能来做到这一点。

    //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")
    }
    

    并使用它:

    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
    }
    

    或者更好的是,您可以重构代码以使其更加一致:

    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))
    }
    

    并将NewRouter 简化为:

    func NewRouter() *mux.Router {
        r := mux.NewRouter()
        addMainHandler(r)
        addSignHandler(r)
        return r
    }
    

    【讨论】:

    • 耶!!谢谢!我真的很接近这个解决方案!太感谢了。不幸的是,我不能投票赞成这个答案。
    • 太棒了。感谢您抽出宝贵时间回复。
    猜你喜欢
    • 2013-10-21
    • 2015-04-18
    • 2017-11-07
    • 2017-11-09
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 2015-06-17
    • 1970-01-01
    相关资源
    最近更新 更多