golang实现路由中间件middleware
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的更多相关文章
- express中的中间件(middleware)、自定义中间件、静态文件中间件、路由中间件
express文档地址 什么是中间件呢(middleware)?它是谁的中间件呢? 首先我们需要了解到请求和响应, 请求就是客户端发送请求给服务器, 响应就是,服务器根据客户端的请求返回给客户端的数据 ...
- laravel中间件-----------middleware
middleware中间件 是访问到达服务器后在被对应的路由处理之前所经过的一层过滤层,故称中间件. 中间件是存放在app\http\middleware中,需要定一个 handle 处理方法,在ha ...
- [系列] - go-gin-api 路由中间件 - 日志记录(三)
目录 概述 gin.Logger() 自定义 Logger() 源码地址 go-gin-api 系列文章 概述 首先同步下项目概况: 上篇文章分享了,规划项目目录和参数验证,其中参数验证使用的是 va ...
- go-gin-api 路由中间件 - 日志记录
概述 首先同步下项目概况: 上篇文章分享了,规划项目目录和参数验证,其中参数验证使用的是 validator.v8 版本,现已更新到 validator.v9 版本,最新代码查看 github 即可. ...
- laravel 的路由中间件
简介# Laravel 中间件提供了一种方便的机制来过滤进入应用的HTTP请求.例如,Laravel 内置了一个中间件来验证用户的身份认证 , 如果没有通过身份认证,中间件会将用户重定向到登陆界面,但 ...
- day54:django:锁和事务&Ajax&中间件Middleware
目录 1.ORM中的锁和事务 2.Ajax 3.中间件:Middleware 3.1 什么是中间件? 3.2 django请求的生命周期 3.3 中间件可以定义的5个方法 3.4 自定义中间件的流程 ...
- Django中间件(Middleware)处理请求
关注公众号"轻松学编程"了解更多. 1.面向切面编程 切点(钩子) 切点允许我们动态的在原有逻辑中插入一部分代码 在不修改原有代码的情况下,动态注入一部分代码 默认情况,不中断传播 ...
- ASP.NET Core 开发-中间件(Middleware)
ASP.NET Core开发,开发并使用中间件(Middleware). 中间件是被组装成一个应用程序管道来处理请求和响应的软件组件. 每个组件选择是否传递给管道中的下一个组件的请求,并能之前和下一组 ...
- ASP.NET Core中间件(Middleware)实现WCF SOAP服务端解析
ASP.NET Core中间件(Middleware)进阶学习实现SOAP 解析. 本篇将介绍实现ASP.NET Core SOAP服务端解析,而不是ASP.NET Core整个WCF host. 因 ...
随机推荐
- pg_escape_string专用于转义数据库敏感字符
(PHP 4 >= 4.2.0, PHP 5) pg_escape_string — 转义 text/char 类型的字符串 说明 string pg_escape_string ( strin ...
- enq: DX – contention等待事件解决方法
前几日,一测试环境在dblink单表同步的时候(不管怎么说,目前仍然是同构数据库同步性能最快的方法,别听网上的扯淡,无论goldengate还是java层,都是比较慢的),某张表一直同步不过去,看了一 ...
- [转]Vue CLI 3搭建vue+vuex 最全分析
原文地址:https://my.oschina.net/wangnian/blog/2051369 一.介绍 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统.有三个组件: CLI:@ ...
- linux下node.js 查版本号和更新 how to update node
我用的Mac,不是windows,不太清楚那个怎么搞. Linux下就是终端直接命令 //查版本号 node --version // v6.10.1 我很久没更了 //更新 //先清理Npm的cac ...
- 某表中字段值存在多个Gid逗号分开 取值拆分每个gid SQL多个逗号隔开的取值
存在值信息 表值函数实现: --实现split功能 的函数 拆分 逗号分开的多个值 ),)) )) as begin declare @i int set @SourceSql=rtrim(ltrim ...
- 001-脚手架发展,基础代码结构+mybatis代码生成
一.概述 脚手架是为了保证各施工过程顺利进行而搭设的工作平台. 编程领域中的“脚手架(Scaffolding)”指的是能够快速搭建项目“骨架”的一类工具. java变成中,架构师搭建的代码结构你到处拷 ...
- Nginx 配置 HTTPS SSL 代理
配置文件如下: #user nobody; worker_processes 1; events { worker_connections 1024; } http { include mime.ty ...
- ubuntu中cmake版本升级
在网上下载一个项目,编译提示版本太低 CMake Error at CMakeLists.txt: (cmake_minimum_required): CMake 编译方式安装(需要openssl) ...
- TortoiseGit,git 未能顺利结束 (退出码 1)
其中一个原因是不能把Git下所有文件全部删除,一个都没有,就会报这个错误. 注:空文件夹git定义为空,不是文件.所以只有空文件夹也会报这个错误.
- 从Asp .net到Asp core (第二篇)《Asp Core 的生命周期》
前面一篇文章简单回顾了Asp .net的生命周期,也简单提到了Asp .net与Asp Core 的区别,我们说Asp Core不在使用Asp.netRuntime,所以它也没有了web程序生命周期中 ...