diff --git a/internal/utils/json.go b/internal/utils/json.go new file mode 100644 index 00000000..b549c40d --- /dev/null +++ b/internal/utils/json.go @@ -0,0 +1,24 @@ +// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. + +package utils + +import ( + "encoding/json" + "reflect" +) + +// JSONClone 使用JSON克隆对象 +func JSONClone(v interface{}) (interface{}, error) { + data, err := json.Marshal(v) + if err != nil { + return nil, err + } + + var nv = reflect.New(reflect.TypeOf(v).Elem()).Interface() + err = json.Unmarshal(data, nv) + if err != nil { + return nil, err + } + + return nv, nil +} diff --git a/internal/utils/json_test.go b/internal/utils/json_test.go new file mode 100644 index 00000000..7c8f412e --- /dev/null +++ b/internal/utils/json_test.go @@ -0,0 +1,25 @@ +// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. + +package utils_test + +import ( + "github.com/TeaOSLab/EdgeAdmin/internal/utils" + "testing" +) + +func TestJSONClone(t *testing.T) { + type A struct { + B int `json:"b"` + C string `json:"c"` + } + + var a = &A{B: 123, C: "456"} + + for i := 0; i < 5; i++ { + c, err := utils.JSONClone(a) + if err != nil { + t.Fatal(err) + } + t.Logf("%p, %#v", c, c) + } +} diff --git a/internal/web/actions/default/servers/server/settings/cache/createPopup.go b/internal/web/actions/default/servers/server/settings/cache/createPopup.go index 454157b2..91e24789 100644 --- a/internal/web/actions/default/servers/server/settings/cache/createPopup.go +++ b/internal/web/actions/default/servers/server/settings/cache/createPopup.go @@ -2,6 +2,7 @@ package cache import ( "encoding/json" + "github.com/TeaOSLab/EdgeAdmin/internal/utils" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" "github.com/iwind/TeaGo/actions" @@ -28,7 +29,7 @@ func (this *CreatePopupAction) RunPost(params struct { Must *actions.Must }) { - cacheRef := &serverconfigs.HTTPCacheRef{} + var cacheRef = &serverconfigs.HTTPCacheRef{} err := json.Unmarshal(params.CacheRefJSON, cacheRef) if err != nil { this.ErrorPage(err) @@ -42,7 +43,13 @@ func (this *CreatePopupAction) RunPost(params struct { this.Fail("请填写匹配条件分组") } - err = cacheRef.Init() + this.Data["cacheRef"] = cacheRef + + cacheRefClone, err := utils.JSONClone(cacheRef) + if err != nil { + this.Fail(err.Error()) + } + err = cacheRefClone.(*serverconfigs.HTTPCacheRef).Init() if err != nil { this.ErrorPage(err) return diff --git a/web/public/js/components.js b/web/public/js/components.js index 1f66e2d7..9380a78c 100755 --- a/web/public/js/components.js +++ b/web/public/js/components.js @@ -2575,6 +2575,7 @@ Vue.component("http-cache-refs-box", { {{cacheRef.methods.join(", ")}} Expires 状态码:{{cacheRef.status.map(function(v) {return v.toString()}).join(", ")}} + 区间缓存 @@ -4386,6 +4387,7 @@ Vue.component("http-cache-refs-config-box", { {{cacheRef.methods.join(", ")}} Expires 状态码:{{cacheRef.status.map(function(v) {return v.toString()}).join(", ")}} + 区间缓存 diff --git a/web/public/js/components/server/http-cache-refs-box.js b/web/public/js/components/server/http-cache-refs-box.js index 150b1cae..24b09451 100644 --- a/web/public/js/components/server/http-cache-refs-box.js +++ b/web/public/js/components/server/http-cache-refs-box.js @@ -52,6 +52,7 @@ Vue.component("http-cache-refs-box", { {{cacheRef.methods.join(", ")}} Expires 状态码:{{cacheRef.status.map(function(v) {return v.toString()}).join(", ")}} + 区间缓存 diff --git a/web/public/js/components/server/http-cache-refs-config-box.js b/web/public/js/components/server/http-cache-refs-config-box.js index 3c0429b3..b82bea7c 100644 --- a/web/public/js/components/server/http-cache-refs-config-box.js +++ b/web/public/js/components/server/http-cache-refs-config-box.js @@ -175,6 +175,7 @@ Vue.component("http-cache-refs-config-box", { {{cacheRef.methods.join(", ")}} Expires 状态码:{{cacheRef.status.map(function(v) {return v.toString()}).join(", ")}} + 区间缓存