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. gdal 根据条件选择数据

  2. Xamarin图表开发基础教程(10)OxyPlot框架支持的图表类型

    Xamarin图表开发基础教程(10)OxyPlot框架支持的图表类型 OxyPlot组件支持26种图表,这些图表按照功能和样式可以分为4大类,分别为线型图表.条型图表.金融图表和其它图表. 线型图表 ...

  3. jenkins报错Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password) 的处理

    问题背景:jenkins服务器发布代码后需要执行删除缓存的操作ssh -p222 eus_pe_devadmin@1.1.1.1 "sudo rm -rf /dev/shm/nginx/hi ...

  4. (转载)PyTorch代码规范最佳实践和样式指南

    A PyTorch Tools, best practices & Styleguide 中文版:PyTorch代码规范最佳实践和样式指南 This is not an official st ...

  5. depth wise CNN

    depth wise cnn相对于传统的CNN,区别在于:它是逐通道做卷积操作! 例子如下: (1)使用传统卷积,输入:H*W*C_in,最终输出h*w*C_out:卷积核尺寸为K*K*C_in*C_ ...

  6. Windows系统因“CredSSP加密Oracle修正”无法远程连接

    解决办法如下: 在电脑本机运行(快捷键 Win+R)输入:gpedit.msc 回车: 计算机配置->管理模板->系统->凭据分配->右侧找到“加密Oracle凭据”双击-&g ...

  7. [LeetCode] 136. Single Number 单独数

    Given a non-empty array of integers, every element appears twice except for one. Find that single on ...

  8. 基于Prometheus+Grafana+AlertManager的监控系统

    一.Prometheus 1.1 简介 Prometheus是一套开源的监控&报警&时间序列数据库的组合,基于应用的metrics来进行监控的开源工具 . 1.2 下载&安装 ...

  9. Android接收RabbitMQ消息。

    参考:https://blog.csdn.net/qq_36576738/article/details/83754621 我这android这边就不实现发布消息功能.因为我是在服务端那边推送消息. ...

  10. scrapy爬虫,cmd中执行日志中显示了爬取的内容,但是运行时隐藏日志后(运行命令后添加--nolog),就没有输出结果了

    cmd下执行scrapy爬虫程序,不报错也没有输出,解决方案 想要执行parse能够在cmd看到parse函数的执行结果: 解决方法: settings.py 中设置  ROBOTSTXT_OBEY  ...