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
}