From 5054b8f6ec64ca6574faf567ebfe497f812e28c6 Mon Sep 17 00:00:00 2001 From: Max Date: Thu, 4 Jan 2024 09:53:34 +0800 Subject: [PATCH] [fix] sui parser and request --- sui/core/parser.go | 13 +++++++++++-- sui/core/request.go | 46 ++++++++++++++++++++++++++++----------------- 2 files changed, 40 insertions(+), 19 deletions(-) diff --git a/sui/core/parser.go b/sui/core/parser.go index d427194a..228fcdde 100644 --- a/sui/core/parser.go +++ b/sui/core/parser.go @@ -242,6 +242,13 @@ func (parser *TemplateParser) forStatementNode(sel *goquery.Selection) { // Create a new node new := sel.Clone() + parser.removeParsed(new) + parser.data[itemVarName] = item + parser.data[indexVarName] = idx + + // parser attributes + parser.parseElementAttrs(new) + parser.parsed(new) // Set the key parser.sequence = parser.sequence + 1 @@ -250,8 +257,6 @@ func (parser *TemplateParser) forStatementNode(sel *goquery.Selection) { // Show the node parser.show(new) - parser.data[itemVarName] = item - parser.data[indexVarName] = idx if parser.option.Editor { parser.setSuiAttr(new, "generate", "true") @@ -414,6 +419,10 @@ func (parser *TemplateParser) parsed(sel *goquery.Selection) { sel.SetAttr("parsed", "true") } +func (parser *TemplateParser) removeParsed(sel *goquery.Selection) { + sel.RemoveAttr("parsed") +} + func (parser *TemplateParser) hasParsed(sel *goquery.Selection) bool { if parseed, exist := sel.Attr("parsed"); exist && parseed == "true" { return true diff --git a/sui/core/request.go b/sui/core/request.go index bba3395b..b1206f70 100644 --- a/sui/core/request.go +++ b/sui/core/request.go @@ -7,6 +7,7 @@ import ( jsoniter "github.com/json-iterator/go" "github.com/yaoapp/gou/process" "github.com/yaoapp/kun/any" + "github.com/yaoapp/kun/log" ) // Cache the cache @@ -211,7 +212,11 @@ func (r *Request) call(p interface{}) (interface{}, error) { process.WithSID(r.Sid) } - return process.Exec() + v, err := process.Exec() + if err != nil { + log.Error("[Request] process %s %s", processName, err.Error()) + } + return v, err } func (r *Request) parseArgs(args []interface{}) ([]interface{}, error) { @@ -230,28 +235,35 @@ func (r *Request) parseArgs(args []interface{}) ([]interface{}, error) { switch v := arg.(type) { case string: - if strings.HasPrefix(v, "$") { - key := strings.TrimLeft(v, "$") - args[i] = key - if data.Has(key) { - v := data.Get(key) - args[i] = v - if strings.HasPrefix(key, "query.") || strings.HasPrefix(key, "header.") { - switch arg := v.(type) { - case []interface{}: - if len(arg) == 1 { - args[i] = arg[0] - } - case []string: - if len(arg) == 1 { - args[i] = arg[0] - } + if !strings.HasPrefix(v, "$") { + args[i] = v + break + } + + key := strings.TrimLeft(v, "$") + args[i] = key + if data.Has(key) { + v := data.Get(key) + args[i] = v + if strings.HasPrefix(key, "query.") || strings.HasPrefix(key, "header.") { + switch arg := v.(type) { + case []interface{}: + if len(arg) == 1 { + args[i] = arg[0] + } + case []string: + if len(arg) == 1 { + args[i] = arg[0] } } } } break + case int, int8, int16, int32, int64, float32, float64, bool, []string, []int, []int8, []int16, []int32, []int64, []float32, []float64, []bool: + args[i] = v + break + case []interface{}: res, err := r.parseArgs(v) if err != nil {