golang实现路由中间件middleware
registerHandlers.go
package routerimport ( "../ctrl" "../funcs" "github.com/julienschmidt/httprouter" "net/http")type middleWareHandler struct { r *httprouter.Router}func NewMiddleWareHandler(r *httprouter.Router) http.Handler { m := middleWareHandler{} m.r = r return m}func (m middleWareHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { //检验合法性(session) ok := funcs.ValidateUser(r) if ok == false { funcs.Resp(w, -1, "请先登录", nil) return } m.r.ServeHTTP(w, r)}func RegisterHandlers() *httprouter.Router { router := httprouter.New() router.ServeFiles("/asset/*filepath", http.Dir("asset")) //启动静态资源服务 router.POST("/user/login", ctrl.Login) //登陆 router.POST("/user/register", ctrl.Register) //注册 router.POST("/contact/addfriend", ctrl.AddFriend) //添加好友 router.POST("/contact/loadfriend", ctrl.LoadFriend) //加载好友 return router}
main.go
package mainimport ( "./funcs" "./router" "html/template" "log" "net/http" "runtime")var ( AllConf funcs.Confs err error tpl *template.Template //SessionManager *funcs.Manager)//func init() {// SessionManager = funcs.Manager{}//}//循环渲染所有模版、路由方法func DisplayView() { tpl, err = template.ParseGlob("view/**/*") //错误则不必再继续 if err != nil { log.Fatal(err.Error()) } for _, v := range tpl.Templates() { tplName := v.Name() http.HandleFunc(tplName, func(writer http.ResponseWriter, request *http.Request) { tpl.ExecuteTemplate(writer, tplName, nil) }) }}func main() { //初始化配置 if AllConf, err = funcs.InitConf("config.json"); err != nil { log.Fatal(err) } //初始化核心数 runtime.GOMAXPROCS(runtime.NumCPU()) //初始化数据库 //渲染模版 //DisplayView() //注册路由 r := router.RegisterHandlers() mh := router.NewMiddleWareHandler(r) err := http.ListenAndServe(":80", mh) if err != nil { log.Fatal(err) }}
还可以更灵活:
main.go
package mainimport ( "./funcs" "html/template" "log" "net/http" "runtime" "./ctrl")var ( AllConf funcs.Confs err error tpl *template.Template //SessionManager *funcs.Manager)//func init() {// SessionManager = funcs.Manager{}//}//循环渲染所有模版、路由方法func DisplayView() { tpl, err = template.ParseGlob("view/**/*") //错误则不必再继续 if err != nil { log.Fatal(err.Error()) } for _, v := range tpl.Templates() { tplName := v.Name() http.HandleFunc(tplName, func(writer http.ResponseWriter, request *http.Request) { tpl.ExecuteTemplate(writer, tplName, nil) }) }}func main() { //初始化配置 if AllConf, err = funcs.InitConf("config.json"); err != nil { log.Fatal(err) } //初始化核心数 runtime.GOMAXPROCS(runtime.NumCPU()) //初始化数据库 http.Handle("/user/login", http.HandlerFunc(ctrl.Login)) //登陆 post http.Handle("/user/register", http.HandlerFunc(ctrl.Register)) //注册 post http.Handle("/contact/addfriend", funcs.AuthLogin(http.HandlerFunc(ctrl.AddFriend))) //添加好友 get http.Handle("/contact/loadfriend", funcs.AuthLogin(http.HandlerFunc(ctrl.LoadFriend))) //加载好友 get err := http.ListenAndServe(":80", nil) if err != nil { log.Fatal(err) }}
middleWare.go
package funcsimport ( "../defs" "../model/redis" "encoding/json" "net/http")//验证是否登陆func AuthLogin(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { //验证... })}
ctrl/addFriend.go
package ctrlimport ( "../funcs" "../model" "fmt" "net/http" "strconv")var contactModel model.Contactfunc AddFriend(writer http.ResponseWriter, request *http.Request) { fmt.Println("addFriend") return}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。