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. CMU Database Systems - Database Recovery

    数据库数据丢失的典型场景如下, 数据commit后,还没有来得及flush到disk,这时候crash就会丢失数据 当然这只是fail的一种情况,DataBase Recovery要讨论的是,在各种f ...

  2. layui的layer.open()方法查看缩略图 原图缩放

    写在前面 需求是页面上的图片缩略图, 鼠标悬浮时显示原图片, 并按比例缩放. 操作步骤 官方文档 点击跳转 关键属性 1. type: 设置type=1, 以页面的形式展示图片 2.  content ...

  3. 安装比特币区块链钱包API(Blockchain Wallet用户发送和接收比特币的简单API)

    区块链钱包API提供了一个简单的界面,商家可以用它以编程方式与钱包进行交互. 安装:要使用此API,您需要运行负责管理区块链钱包的小型本地服务. 您的应用程序通过HTTP API调用在本地与此服务进行 ...

  4. 爬虫的正则表达式re模块

    爬虫一共就四个主要步骤: 明确目标 (要知道你准备在哪个范围或者网站去搜索) 爬 (将所有的网站的内容全部爬下来) 取 (去掉对我们没用处的数据) 处理数据(按照我们想要的方式存储和使用) 对于dow ...

  5. Java之安装JDK

    因为Java程序必须运行在JVM只是,所以我们第一件事情就是安装JDK 从Oracle官网下载最新稳定版JDK 一,Linux系统CentOS安装JDK 下载rpm安装包 安装 rpm -ivh jd ...

  6. 【SSH进阶之路】Spring的IOC逐层深入——Spring的IOC原理[通俗解释一下](三)

    1. IoC理论的背景我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 图1:软件系统中耦合的对象 如果我们打开机械 ...

  7. 密钥密码体系CA,CSC,CV

    密钥密码体系CA,CD,CSC,CV 片内操作系统 (cos) 密码学(Cryptography) 非接触式智能卡Contactless Smart Card, CSC 密钥名词 名词 英文说明 中文 ...

  8. PHP 获取星期

    <?php function getWeek($time = 0) { $week_array=array('日', '一', '二', '三', '四', '五', '六'); //先定义一个 ...

  9. c++快速排序原理及优化

    快速排序 快速排序的时间复杂度为O(logn) 注意:快速排序主要是标志数的选取,如果所选的数恰好为最小或者最大,则是最糟糕的情况,即一轮下来数据没有发生变化! 如何选取中间的标志数成为了算法的关键. ...

  10. vue中指令绑定的v-if逻辑结构

    <!-- if判断 --> <div id="app2"> <p v-if="seen"> <!-- 给p标签绑定指令 ...