Commit b32cba35 authored by Steven's avatar Steven

fix: add nil check for AnyResponse in WrapUnary method to prevent caching issues

parent b0558824
...@@ -5,6 +5,7 @@ import ( ...@@ -5,6 +5,7 @@ import (
"errors" "errors"
"fmt" "fmt"
"log/slog" "log/slog"
"reflect"
"runtime/debug" "runtime/debug"
"connectrpc.com/connect" "connectrpc.com/connect"
...@@ -56,7 +57,7 @@ func (*MetadataInterceptor) WrapUnary(next connect.UnaryFunc) connect.UnaryFunc ...@@ -56,7 +57,7 @@ func (*MetadataInterceptor) WrapUnary(next connect.UnaryFunc) connect.UnaryFunc
// Prevent browser caching of API responses to avoid stale data issues // Prevent browser caching of API responses to avoid stale data issues
// See: https://github.com/usememos/memos/issues/5470 // See: https://github.com/usememos/memos/issues/5470
if resp != nil && resp.Header() != nil { if !isNilAnyResponse(resp) && resp.Header() != nil {
resp.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate") resp.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
resp.Header().Set("Pragma", "no-cache") resp.Header().Set("Pragma", "no-cache")
resp.Header().Set("Expires", "0") resp.Header().Set("Expires", "0")
...@@ -66,6 +67,14 @@ func (*MetadataInterceptor) WrapUnary(next connect.UnaryFunc) connect.UnaryFunc ...@@ -66,6 +67,14 @@ func (*MetadataInterceptor) WrapUnary(next connect.UnaryFunc) connect.UnaryFunc
} }
} }
func isNilAnyResponse(resp connect.AnyResponse) bool {
if resp == nil {
return true
}
val := reflect.ValueOf(resp)
return val.Kind() == reflect.Ptr && val.IsNil()
}
func (*MetadataInterceptor) WrapStreamingClient(next connect.StreamingClientFunc) connect.StreamingClientFunc { func (*MetadataInterceptor) WrapStreamingClient(next connect.StreamingClientFunc) connect.StreamingClientFunc {
return next return next
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment