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

  }

golang实现路由中间件middleware的更多相关文章

  1. express中的中间件(middleware)、自定义中间件、静态文件中间件、路由中间件

    express文档地址 什么是中间件呢(middleware)?它是谁的中间件呢? 首先我们需要了解到请求和响应, 请求就是客户端发送请求给服务器, 响应就是,服务器根据客户端的请求返回给客户端的数据 ...

  2. laravel中间件-----------middleware

    middleware中间件 是访问到达服务器后在被对应的路由处理之前所经过的一层过滤层,故称中间件. 中间件是存放在app\http\middleware中,需要定一个 handle 处理方法,在ha ...

  3. [系列] - go-gin-api 路由中间件 - 日志记录(三)

    目录 概述 gin.Logger() 自定义 Logger() 源码地址 go-gin-api 系列文章 概述 首先同步下项目概况: 上篇文章分享了,规划项目目录和参数验证,其中参数验证使用的是 va ...

  4. go-gin-api 路由中间件 - 日志记录

    概述 首先同步下项目概况: 上篇文章分享了,规划项目目录和参数验证,其中参数验证使用的是 validator.v8 版本,现已更新到 validator.v9 版本,最新代码查看 github 即可. ...

  5. laravel 的路由中间件

    简介# Laravel 中间件提供了一种方便的机制来过滤进入应用的HTTP请求.例如,Laravel 内置了一个中间件来验证用户的身份认证 , 如果没有通过身份认证,中间件会将用户重定向到登陆界面,但 ...

  6. day54:django:锁和事务&Ajax&中间件Middleware

    目录 1.ORM中的锁和事务 2.Ajax 3.中间件:Middleware 3.1 什么是中间件? 3.2 django请求的生命周期 3.3 中间件可以定义的5个方法 3.4 自定义中间件的流程 ...

  7. Django中间件(Middleware)处理请求

    关注公众号"轻松学编程"了解更多. 1.面向切面编程 切点(钩子) 切点允许我们动态的在原有逻辑中插入一部分代码 在不修改原有代码的情况下,动态注入一部分代码 默认情况,不中断传播 ...

  8. ASP.NET Core 开发-中间件(Middleware)

    ASP.NET Core开发,开发并使用中间件(Middleware). 中间件是被组装成一个应用程序管道来处理请求和响应的软件组件. 每个组件选择是否传递给管道中的下一个组件的请求,并能之前和下一组 ...

  9. ASP.NET Core中间件(Middleware)实现WCF SOAP服务端解析

    ASP.NET Core中间件(Middleware)进阶学习实现SOAP 解析. 本篇将介绍实现ASP.NET Core SOAP服务端解析,而不是ASP.NET Core整个WCF host. 因 ...

随机推荐

  1. js中isNaN和Number.isNaN的区别

    isNaN 当我们向isNaN传递一个参数,它的本意是通过Number()方法尝试将这参数转换成Number类型,如果成功返回false,如果失败返回true. 所以isNaN只是判断传入的参数是否能 ...

  2. 如何使用Salt Pillar

    作者言 Salt的网站上有两篇关于Pillar的文档(一,二),其中一篇内容很少,我觉得写成一篇文章更合适.本文的逻辑结构没有参照官方文档,而是根据我自己对Pillar的理解组织内容,希望能够把这个概 ...

  3. Nodejs介绍和环境搭建

    Nodejs是JavaScript的运行环境,它让 Java Script 可以开发后端程序,实现几乎其他后端 Node.js 是一个 Javascript 运行环境(runtime) 可以与 PHP ...

  4. openresty开发系列36--openresty执行流程之6日志模块处理阶段

    openresty开发系列36--openresty执行流程之6日志模块处理阶段 一)header_filter_by_lua 语法:header_filter_by_lua <lua-scri ...

  5. springboot入门简单,深入难

    18年1月份的时候在腾讯课堂学习springboot.springcloud搭建微服务,老师告诉我们,springboot入门容易,深入难. 因为你必须东西SpringMVC.Spring.Mybat ...

  6. DataTable.NET的event執行順序

    var dataTable = $('#table') .on( 'processing.dt', function ( e, settings, processing ) { $('#loading ...

  7. [LeetCode] 108. Convert Sorted Array to Binary Search Tree 把有序数组转成二叉搜索树

    Given an array where elements are sorted in ascending order, convert it to a height balanced BST. Fo ...

  8. sshpass命令使用

    1.直接远程连接某主机 sshpass -p {密码} ssh {用户名}@{主机IP} 2.远程连接指定ssh的端口 sshpass -p {密码} ssh -p ${端口} {用户名}@{主机IP ...

  9. vue-cli3 配置跨域并通axios进行数据请求

    在项目根目录下创建vue.config.js文件,配置信息: module.exports = { devServer: { proxy: { '/api': { target: 'http://19 ...

  10. php_mvc实现步骤九(登录验证码,退出-登录标记)

    shop34-17-登录验证码 验证码的分析 登录:防止暴力破解 论坛:防止灌水水 展示类:被抓取. 需要技术: 图片处理技术. 会话session技术. PHP图片处理技术 – GD 具体操作步骤 ...