golang implement routing middleware middleware

  registerHandlers.go

  package router

  import (

  "../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) {

  // test the legality of (session)

  ok := funcs.ValidateUser(r)

  if ok == false {

  funcs.Resp (w, -1, "Login", nil)

  return

  }

  m.r.ServeHTTP(w, r)

  }

  func RegisterHandlers() *httprouter.Router {

  router := httprouter.New()

  router.ServeFiles ( "/ asset / * filepath", http.Dir ( "asset")) // start the static resource services

  router.POST("/user/login", ctrl.Login) //登陆

  router.POST("/user/register", ctrl.Register) //注册

  router.POST ( "/ contact / addfriend", ctrl.AddFriend) // add friends

  router.POST ( "/ contact / loadfriend", ctrl.LoadFriend) // Load Friend

  return router

  }

  main.go

  package main

  import (

  "./funcs"

  "./router"

  "html/template"

  "log"

  "net/http"

  "runtime"

  )

  where (

  AllConf funcs.Confs

  err error

  tpl *template.Template

  //SessionManager *funcs.Manager

  )

  //func init() {

  // SessionManager = funcs.Manager{}

  //}

  // Loop render all templates, routing method

  func DisplayView() {

  dwt, err = template.ParseGlob ( "view / ** / *")

  // error is no longer continue

  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() {

  // Initialization Configuration

  if AllConf, err = funcs.InitConf("config.json"); err != nil {

  log.Fatal(err)

  }

  // Initialize the number of cores

  runtime.GOMAXPROCS(runtime.NumCPU())

  // initialize the database

  // Render Template

  //DisplayView()

  // Register route

  r := router.RegisterHandlers()

  mh := router.NewMiddleWareHandler(r)

  err := http.ListenAndServe(":80", mh)

  if err != nil {

  log.Fatal(err)

  }

  }

  Also more flexibility:

  main.go

  package main

  import (

  "./funcs"

  "html/template"

  "log"

  "net/http"

  "runtime"

  "./ctrl"

  )

  where (

  AllConf funcs.Confs

  err error

  tpl *template.Template

  //SessionManager *funcs.Manager

  )

  //func init() {

  // SessionManager = funcs.Manager{}

  //}

  // Loop render all templates, routing method

  func DisplayView() {

  dwt, err = template.ParseGlob ( "view / ** / *")

  // error is no longer continue

  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() {

  // Initialization Configuration

  if AllConf, err = funcs.InitConf("config.json"); err != nil {

  log.Fatal(err)

  } Wuxi abortion abortion Which http://xmobile.wxbhnk120.com/

  // Initialize the number of cores

  runtime.GOMAXPROCS(runtime.NumCPU())

  // initialize the database

  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 funcs

  import (

  "../defs"

  "../model/redis"

  "encoding/json"

  "net/http"

  )

  // Verify landing

  func AuthLogin(next http.Handler) http.Handler {

  return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {

  //verification...

  })

  }

  ctrl/addFriend.go

  package ctrl

  import (

  "../funcs"

  "../model"

  "fmt"

  "net/http"

  "strconv"

  )

  var contactModel model.Contact

  func AddFriend(writer http.ResponseWriter, request *http.Request) {

  fmt.Println("addFriend")

  return

  }

Guess you like

Origin www.cnblogs.com/djw12333/p/11162690.html