-
Notifications
You must be signed in to change notification settings - Fork 1
/
http.go
168 lines (147 loc) · 4.33 KB
/
http.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
package service
import (
"net/http"
"github.com/wup364/pakku/ipakku"
"github.com/wup364/pakku/utils/logs"
"github.com/wup364/pakku/utils/serviceutil"
)
// HTTPService HTTP服务路由
type HTTPService struct {
app ipakku.Application
http *serviceutil.HTTPService
config ipakku.AppConfig `@autowired:""`
}
// AsModule 作为一个模块加载
func (service *HTTPService) AsModule() ipakku.Opts {
return ipakku.Opts{
Name: "HTTPService",
Version: 1.0,
Description: "HTTP服务路由",
OnReady: func(app ipakku.Application) {
service.app = app
service.http = serviceutil.NewHTTPService()
},
}
}
// SetDebug SetDebug
func (service *HTTPService) SetDebug(debug bool) {
service.http.SetDebug(debug)
}
// GetRouter GetRouter
func (service *HTTPService) GetRouter() *serviceutil.ServiceRouter {
return service.http.GetRouter()
}
// Get Get
func (service *HTTPService) Get(url string, fun ipakku.HandlerFunc) error {
return service.http.Get(url, func(w http.ResponseWriter, r *http.Request) {
fun(w, r)
})
}
// Post Post
func (service *HTTPService) Post(url string, fun ipakku.HandlerFunc) error {
return service.http.Post(url, func(w http.ResponseWriter, r *http.Request) {
fun(w, r)
})
}
// Put Put
func (service *HTTPService) Put(url string, fun ipakku.HandlerFunc) error {
return service.http.Put(url, func(w http.ResponseWriter, r *http.Request) {
fun(w, r)
})
}
// Patch Patch
func (service *HTTPService) Patch(url string, fun ipakku.HandlerFunc) error {
return service.http.Patch(url, func(w http.ResponseWriter, r *http.Request) {
fun(w, r)
})
}
// Head Head
func (service *HTTPService) Head(url string, fun ipakku.HandlerFunc) error {
return service.http.Head(url, func(w http.ResponseWriter, r *http.Request) {
fun(w, r)
})
}
// Options Options
func (service *HTTPService) Options(url string, fun ipakku.HandlerFunc) error {
return service.http.Options(url, func(w http.ResponseWriter, r *http.Request) {
fun(w, r)
})
}
// Delete Delete
func (service *HTTPService) Delete(url string, fun ipakku.HandlerFunc) error {
return service.http.Delete(url, func(w http.ResponseWriter, r *http.Request) {
fun(w, r)
})
}
// Any Any
func (service *HTTPService) Any(url string, fun ipakku.HandlerFunc) error {
return service.http.Any(url, func(w http.ResponseWriter, r *http.Request) {
fun(w, r)
})
}
// AsRouter 批量注册路由, 可以再指定一个前缀url
func (service *HTTPService) AsRouter(url string, router ipakku.Router) error {
logs.Debugf("AsRouter: %T\r\n", router)
// 自动注入依赖
if err := service.app.Utils().AutoWired(router); nil != err {
return err
}
// 自动完成配置
if err := service.config.ScanAndAutoConfig(router); nil != err {
return err
}
return service.http.AsRouter(url, router)
}
// AsController 批量注册路由, 使用RequestMapping字段作为前缀url
func (service *HTTPService) AsController(router ipakku.Controller) (err error) {
logs.Debugf("AsController: %T\r\n", router)
// 自动注入依赖
if err = service.app.Utils().AutoWired(router); nil != err {
return
}
// 自动完成配置
if err = service.config.ScanAndAutoConfig(router); nil != err {
return
}
//
ctl := router.AsController()
if err = service.http.BulkRouters(ctl.RequestMapping, ctl.ToLowerCase, ctl.HandlerFunc); nil != err {
return
}
if len(ctl.FilterConfig) > 0 {
for _, fc := range ctl.FilterConfig {
var subPath string
if subPath = fc.Path; len(subPath) == 0 {
subPath = ":**"
}
if err = service.Filter(ctl.RequestMapping+"/"+subPath, fc.Func); nil != err {
return
}
}
}
return
}
// Filter Filter
func (service *HTTPService) Filter(url string, fun ipakku.FilterFunc) error {
return service.http.AddURLFilter(url, func(w http.ResponseWriter, r *http.Request) bool {
return fun(w, r)
})
}
// SetStaticDIR SetStaticDIR
func (service *HTTPService) SetStaticDIR(path, dir string, fun ipakku.FilterFunc) (err error) {
return service.http.SetStaticDIR(path, dir, func(rw http.ResponseWriter, r *http.Request) bool {
if nil == fun {
return true
}
return fun(rw, r)
})
}
// SetStaticFile SetStaticFile
func (service *HTTPService) SetStaticFile(path, file string, fun ipakku.FilterFunc) error {
return service.http.SetStaticFile(path, file, func(rw http.ResponseWriter, r *http.Request) bool {
if nil == fun {
return true
}
return fun(rw, r)
})
}