zoukankan      html  css  js  c++  java
  • 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)

      }无锡引产打胎哪家好 http://xmobile.wxbhnk120.com/

      //初始化核心数

      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

      }

  • 相关阅读:
    FFTW3学习笔记2:FFTW(快速傅里叶变换)中文参考
    小程序中用rich-text来实现ul功能 (代码)
    微信小程序中如何实现列表渲染多层嵌套循环
    小程序中实现选择预览图片同时可以实现长按删除图片的代码
    微信小程序实例:获取当前城市位置及再次授权地理位置的代码实现
    微信小程序实例:实现顶部tab切换以及滑动切换时导航栏会随着移动的效果(代码)
    入门微信小程序直播
    微信小程序之登录态
    微信小程序之本地缓存
    微信小程序之页面路由
  • 原文地址:https://www.cnblogs.com/djw12333/p/11162690.html
Copyright © 2011-2022 走看看