mirror of
https://github.com/zeromicro/go-zero.git
synced 2025-01-23 09:00:20 +08:00
feat: export gateway.Server to let users add middlewares (#2157)
This commit is contained in:
parent
4d7dae9cea
commit
453fa309b1
@ -24,6 +24,7 @@ type (
|
||||
// Rpc is the gRPC rpc method, with format of package.service/method
|
||||
Rpc string
|
||||
}
|
||||
|
||||
// upstream is the configuration for upstream.
|
||||
upstream struct {
|
||||
// Grpc is the target of upstream.
|
||||
|
@ -10,6 +10,15 @@ import (
|
||||
"github.com/zeromicro/go-zero/rest/pathvar"
|
||||
)
|
||||
|
||||
func buildJsonRequestParser(v interface{}, resolver jsonpb.AnyResolver) (grpcurl.RequestParser, error) {
|
||||
var buf bytes.Buffer
|
||||
if err := json.NewEncoder(&buf).Encode(v); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return grpcurl.NewJSONRequestParser(&buf, resolver), nil
|
||||
}
|
||||
|
||||
func newRequestParser(r *http.Request, resolver jsonpb.AnyResolver) (grpcurl.RequestParser, error) {
|
||||
vars := pathvar.Vars(r)
|
||||
if len(vars) == 0 {
|
||||
@ -17,12 +26,7 @@ func newRequestParser(r *http.Request, resolver jsonpb.AnyResolver) (grpcurl.Req
|
||||
}
|
||||
|
||||
if r.ContentLength == 0 {
|
||||
var buf bytes.Buffer
|
||||
if err := json.NewEncoder(&buf).Encode(vars); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return grpcurl.NewJSONRequestParser(&buf, resolver), nil
|
||||
return buildJsonRequestParser(vars, resolver)
|
||||
}
|
||||
|
||||
m := make(map[string]interface{})
|
||||
@ -34,10 +38,5 @@ func newRequestParser(r *http.Request, resolver jsonpb.AnyResolver) (grpcurl.Req
|
||||
m[k] = v
|
||||
}
|
||||
|
||||
var buf bytes.Buffer
|
||||
if err := json.NewEncoder(&buf).Encode(m); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return grpcurl.NewJSONRequestParser(&buf, resolver), nil
|
||||
return buildJsonRequestParser(m, resolver)
|
||||
}
|
||||
|
@ -19,7 +19,7 @@ import (
|
||||
|
||||
// Server is a gateway server.
|
||||
type Server struct {
|
||||
svr *rest.Server
|
||||
*rest.Server
|
||||
upstreams []upstream
|
||||
timeout time.Duration
|
||||
}
|
||||
@ -27,7 +27,7 @@ type Server struct {
|
||||
// MustNewServer creates a new gateway server.
|
||||
func MustNewServer(c GatewayConf) *Server {
|
||||
return &Server{
|
||||
svr: rest.MustNewServer(c.RestConf),
|
||||
Server: rest.MustNewServer(c.RestConf),
|
||||
upstreams: c.Upstreams,
|
||||
timeout: c.Timeout,
|
||||
}
|
||||
@ -36,12 +36,12 @@ func MustNewServer(c GatewayConf) *Server {
|
||||
// Start starts the gateway server.
|
||||
func (s *Server) Start() {
|
||||
logx.Must(s.build())
|
||||
s.svr.Start()
|
||||
s.Server.Start()
|
||||
}
|
||||
|
||||
// Stop stops the gateway server.
|
||||
func (s *Server) Stop() {
|
||||
s.svr.Stop()
|
||||
s.Server.Stop()
|
||||
}
|
||||
|
||||
func (s *Server) build() error {
|
||||
@ -69,7 +69,7 @@ func (s *Server) build() error {
|
||||
}, func(pipe <-chan interface{}, cancel func(error)) {
|
||||
for item := range pipe {
|
||||
route := item.(rest.Route)
|
||||
s.svr.AddRoute(route)
|
||||
s.Server.AddRoute(route)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user