Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Triment/eject

Repository files navigation

eject

一个快速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 一个文件下载系统,仅支持下载,上传请使用其他方式。

About

A restful web framework

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

AltStyle によって変換されたページ (->オリジナル) /