golang实现路由中间件middleware
2019-07-07 17:05
1551 查看
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) } }
相关文章推荐
- ASP.NET Core中间件(Middleware)实现WCF SOAP服务端解析
- ASP.NET Core中间件(Middleware)实现WCF SOAP服务端解析
- golang利用不到20行代码实现路由调度详解
- django中间件CsrfViewMiddleware源码分析,探究csrf实现
- golang自定义路由控制实现(二)-流式注册接口以及支持RESTFUL
- 三十一、【WCF路由中间件】WCFHosting服务主机的路由器与负载均衡和实现思路
- golang自定义路由控制实现(一)
- 实现路由的RouterMiddleware中间件
- golang不到20行代码实现路由调度
- golang实现web中间件的一些思考
- golang生成随机函数的实现
- 实验六 利用三层交换机实现VLAN间路由
- Golang信号处理及如何实现进程的优雅退出详解
- 第26篇:AngularJS+ui-router实现一个超简单的登陆和跳转的二级路由demo
- 第五章 利用三层交换机实现VLAN间路由
- 在Golang里如何实现结构体成员指针到结构体自身指针的转换
- 使用vue-Router2 实现路由功能
- vue-router 源码实现前端路由的两种方式
- 用 vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)
- vue编程式路由实现新窗口打开