golang mysql 中间件_golang实现路由中间件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) {

//检验合法性(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 main

import (

"./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 main

import (

"./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 funcs

import (

"../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 ctrl

import (

"../funcs"

"../model"

"fmt"

"net/http"

"strconv"

)

var contactModel model.Contact

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

fmt.Println("addFriend")

return

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值