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. Sparrow-WiFi:一款Linux平台下的图形化WiFi及蓝牙分析工具

    工具概述 Sparrow-wifi本质上一款针对下一代2.4GHz和5GHz的WiFi频谱感知工具,它不仅提供了GUI图形化用户界面,而且功能更加全面,可以代替类似inSSIDer和linssid之类 ...

  2. spring boot jar包替换报错之Unable to open nested entry 'BOOT-INF/lib/cache-api-0.4.jar'.

    spring boot用layout ZIP打出来的包能够支持外部classpath,但是当用rar/7zip替换其中的jar后,报下列错误: Unable to open nested entry ...

  3. oracle远程连接服务器

    一.需要下载的工具 1.PLSQL Developer 下载及安装地址如下: http://www.zdfans.com/html/18196.html 2.下载instantclient-basic ...

  4. JS高级:面向对象的构造函数

    1 创建对象的方式 1.1 字面量的方式创建对象 var p1 = { name: '张三', run: function () { console.log(this.name + '跑'); } } ...

  5. git - gitHub生成Markdown目录

    就是github-markdown-toc.go. github-markdown-toc.go Github地址 如果你有GO语言(又是你)的编译环境,可以尝试自己编译,如果没有,可以直接下载编译好 ...

  6. vue---数据列表过滤筛选

    使用vue进行数据过滤筛选是比较常用的功能,常见的使用场景就是搜索框数据筛选过滤了.简单示例: <template> <div> <input type="te ...

  7. ResponseBody和文件上传

    SpringMVC默认使用MappingJacksonHttpMessageConverter对json数据进行转换 <dependency> <groupId>com.fas ...

  8. PyTorch之DataLoader杂谈

    输入数据PipeLine pytorch 的数据加载到模型的操作顺序是这样的: ①创建一个 Dataset 对象②创建一个 DataLoader 对象③循环这个 DataLoader 对象,将img, ...

  9. [LeetCode] 231. Power of Two 2的次方数

    Given an integer, write a function to determine if it is a power of two. Example 1: Input: 1 Output: ...

  10. [LeetCode] 655. Print Binary Tree 打印二叉树

    Print a binary tree in an m*n 2D string array following these rules: The row number m should be equa ...