Compare commits

...

4 Commits

Author SHA1 Message Date
8555ebdd5c remove debug
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
2021-07-14 22:16:01 +03:00
273da35b92 on error try to return original message to client
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
2021-07-14 17:05:33 +03:00
556e8dd568 fix lint
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
2021-07-09 23:10:48 +03:00
f3573e651b fix field setting
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
2021-07-09 18:22:40 +03:00
2 changed files with 22 additions and 9 deletions

10
http.go
View File

@@ -85,22 +85,22 @@ func newRequest(ctx context.Context, addr string, req client.Request, ct string,
u, err = u.Parse(path)
if err != nil {
return nil, errors.BadRequest("go.micro.client_v", err.Error())
return nil, errors.BadRequest("go.micro.client", err.Error())
}
path, nmsg, err := newPathRequest(u.Path, method, body, msg, tags)
if err != nil {
return nil, errors.BadRequest("go.micro.client_a", err.Error())
return nil, errors.BadRequest("go.micro.client", err.Error())
}
u, err = url.Parse(fmt.Sprintf("%s://%s%s", scheme, host, path))
if err != nil {
return nil, errors.BadRequest("go.micro.client_t", err.Error())
return nil, errors.BadRequest("go.micro.client", err.Error())
}
b, err := cf.Marshal(nmsg)
if err != nil {
return nil, errors.BadRequest("go.micro.client_e", err.Error())
return nil, errors.BadRequest("go.micro.client", err.Error())
}
var hreq *http.Request
@@ -112,7 +112,7 @@ func newRequest(ctx context.Context, addr string, req client.Request, ct string,
}
if err != nil {
return nil, errors.BadRequest("go.micro.client_k", err.Error())
return nil, errors.BadRequest("go.micro.client", err.Error())
}
header := make(http.Header)

21
util.go
View File

@@ -12,6 +12,7 @@ import (
"github.com/unistack-org/micro/v3/client"
"github.com/unistack-org/micro/v3/errors"
"github.com/unistack-org/micro/v3/logger"
rutil "github.com/unistack-org/micro/v3/util/reflect"
util "github.com/unistack-org/micro/v3/util/router"
)
@@ -113,7 +114,7 @@ func newPathRequest(path string, method string, body string, msg interface{}, ta
continue
}
// nolint: gocritic
// nolint: gocritic, nestif
if _, ok := fieldsmap[t.name]; ok {
switch val.Type().Kind() {
case reflect.Slice:
@@ -124,8 +125,10 @@ func newPathRequest(path string, method string, body string, msg interface{}, ta
default:
fieldsmap[t.name] = fmt.Sprintf("%v", val.Interface())
}
} else if (body == "*" || body == t.name) && method != http.MethodGet && tnmsg.Field(i).CanSet() {
tnmsg.Field(i).Set(val)
} else if (body == "*" || body == t.name) && method != http.MethodGet {
if tnmsg.Field(i).CanSet() {
tnmsg.Field(i).Set(val)
}
} else {
if val.Type().Kind() == reflect.Slice {
for idx := 0; idx < val.Len(); idx++ {
@@ -209,7 +212,17 @@ func (h *httpClient) parseRsp(ctx context.Context, hrsp *http.Response, rsp inte
}
cf, cerr := h.newCodec(ct)
if cerr != nil {
if hrsp.StatusCode >= 400 && cerr != nil {
var buf []byte
if hrsp.Body != nil {
buf, err = io.ReadAll(hrsp.Body)
if err != nil && h.opts.Logger.V(logger.ErrorLevel) {
h.opts.Logger.Errorf(ctx, "failed to read body: %v", err)
}
}
// response like text/plain or something else, return original error
return errors.New("go.micro.client", string(buf), int32(hrsp.StatusCode))
} else if cerr != nil {
return errors.InternalServerError("go.micro.client", cerr.Error())
}