这个第三方库,使用自定义中间件时,

语法就感觉流畅很多。

package main

import (
	"fmt"
	"log"
	"net/http"

	//"time"

	"github.com/codegangsta/negroni"
)

func middlewareFirst(w http.ResponseWriter, r *http.Request, next http.HandlerFunc) {
	log.Println("MiddlewareFirst - Before Handler")
	next.ServeHTTP(w, r)
	log.Println("MiddlewareFirst - After Handler")
}

func middlewareSecond(w http.ResponseWriter, r *http.Request, next http.HandlerFunc) {

	log.Println("MiddlewareSecond - Before Handler")
	if r.URL.Path == "/message" {
		if r.URL.Query().Get("password") == "password" {
			log.Println("Authorized to the system")
			next.ServeHTTP(w, r)
		} else {
			log.Println("Failed to authorize to the system")
			return
		}
	} else {
		next.ServeHTTP(w, r)
	}
	log.Println("MiddlewareSecond - After Handler")

}

func index(w http.ResponseWriter, r *http.Request) {
	log.Println("Executing index handler")
	fmt.Fprintf(w, "welcome!")
}

func message(w http.ResponseWriter, r *http.Request) {
	log.Println("Executing message handler")
	fmt.Fprintf(w, "HTTP Middleware is awesome!")
}

func iconHandler(w http.ResponseWriter, r *http.Request) {

}

func main() {
	mux := http.NewServeMux()
	mux.HandleFunc("/favicon", iconHandler)
	mux.HandleFunc("/", index)
	mux.HandleFunc("/message", message)

	n := negroni.Classic()
	n.Use(negroni.HandlerFunc(middlewareFirst))
	n.Use(negroni.HandlerFunc(middlewareSecond))
	n.UseHandler(mux)
	n.Run(":8080")

}

  

最新文章

  1. Python 3.6.0的sqlite3模块无法执行VACUUM语句
  2. Spring声明式事务管理基于tx/aop命名空间
  3. Mvc多级Views目录 asp.net mvc4 路由重写及 修改view 的寻找视图的规则
  4. Timer类和TimerTask类
  5. php protected封装
  6. JQuery 的bind和unbind函数
  7. ecshop中index.dwt文件分析
  8. android内存优化发展——使用软引用
  9. Linux启动新进程的几种方法及比较[转]
  10. 在python&numpy中切片(slice)
  11. 【转】QQ传输文件原理参考(来自互联网)
  12. NetSec2019 20165327 EXP5 MSF基础应用
  13. js 字符串截取函数substr,substring,slice之间的差异
  14. linux软件安装、rpm操作命令、本地yum配置(有什么用)
  15. 059 SparkStream介绍
  16. drf 分页
  17. (笔记)Linux内核中ioremap映射的透彻理解
  18. 使用Fiddler发送POST请求
  19. 【实战项目】【FLEX】#900 实现拖控件功能
  20. Android调试大法 自定义IDE默认签名文件==>微信支付、微信登录、微信分享,debug时调试通过,release时调不起微信

热门文章

  1. Mysql多实例数据库
  2. robot_framework常用关键字
  3. Cloudflare Workers 部署跨域代理服务
  4. 二、Vue 页面渲染过程
  5. 阿里云https证书Apache配置
  6. 建议3:正确处理Javascript特殊值---(1)正确使用NaN和Infinity
  7. 因特尔CPU上TM和R标识的区别
  8. 精通awk系列(16):gawk支持的正则表达式
  9. ceph工作原理
  10. WebAPI接口测试数据库操作