一个快速web框架
- 中间件系统(单向工作流,非洋葱模型)
- 集成路由中间件
参数路由
| 注册路由 | 实际路由 | 匹配参数 |
|---|---|---|
| /hello/:user/:post | /hello/a/b | { user: a, post: b } |
| /public/*path | /public/file/a.txt | { path: file/a.txt } |
参数路由的优先级:优先于*,如下面两个路由注册后会将path将匹配为123
注册路由1: /public/:path/hello
注册路由2: /public/*path
实际路由: /public/123/456
解析后的map为
{
"path": "123"
}如果没有注册路由1,将会解析为:
{
"path": "123/456"
}用法
go get -u github.com/Triment/eject
package main import ( "github.com/Triment/eject" ) type ResMessage struct { Status int `json:"status"` Body interface{} `json:"body"` } func auth(context *eject.Context) bool {//鉴权中间件通过返回true来允许该路由正常运行,可在鉴权路由中进行响应 if context.Req.Header.Get("user")!= "admin" { return false } return true } func main(){ router := eject.CreateRouter()//创建路由 router.GET("/hello", func(context *eject.Context) { context.Res.Write([]byte("hello word") })//注册路由 router.GET("/", func(context *eject.Context) { context.JSON(&ResMessage{Status: 200, Body: "请求成功"}) }) router.GET("/auth", func(context *eject.Context){ context.JSON(&ResMessage{Status: 200, Body: "请求成功"}) }).Before(auth)//鉴权中间件 app := eject.CreateApp()//创建应用 app.Inject(router.Accept())//注入路由中间件 app.Listen(":4567")//监听端口 }
TodoList
-
(削除) 目前实现的中间件是单向流,如同一个处理的大函数,只不过响应和路由分离为内置的路由中间件了,下一步实现面向切面,代码注入的形式 (削除ここまで) -
(削除) 目前实现的请求路由仅支持GET, POST, 将来可能会加入更多请求方法,标准化框架 (削除ここまで) - 分布式应用支持,利用TCP/UDP交换节点信息,自动负载均衡(待评估,需要用概率对实际应用分析后实现相应算法)
实际应用
- fileserver 一个文件下载系统,仅支持下载,上传请使用其他方式。