page.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package middleware
  2. import (
  3. "context"
  4. "strconv"
  5. "github.com/go-kratos/kratos/v2/middleware"
  6. "github.com/go-kratos/kratos/v2/transport/http"
  7. )
  8. var pageURI = make(map[string]bool)
  9. func Page(handler middleware.Handler) middleware.Handler {
  10. return func(ctx context.Context, req interface{}) (reply interface{}, err error) {
  11. if info, ok := http.FromServerContext(ctx); ok {
  12. uri := info.Request.RequestURI
  13. if _, ok1 := pageURI[uri]; !ok1 {
  14. return handler(ctx, req)
  15. }
  16. page := 0
  17. pageSize := 10
  18. query := info.Request.URL.Query()
  19. pageStr := query.Get("page")
  20. if pageStr != "" {
  21. page, err = strconv.Atoi(pageStr)
  22. if err != nil {
  23. return nil, err
  24. }
  25. }
  26. pageSizeStr := query.Get("page_size")
  27. if pageSizeStr != "" {
  28. pageSize, err = strconv.Atoi(pageSizeStr)
  29. if err != nil {
  30. return nil, err
  31. }
  32. }
  33. if pageSize == 0 {
  34. pageSize = 10
  35. }
  36. ctx = context.WithValue(ctx, "page", page)
  37. ctx = context.WithValue(ctx, "page_size", pageSize)
  38. }
  39. return handler(ctx, req)
  40. }
  41. }
  42. func AddPageURI(r string) {
  43. pageURI[r] = true
  44. }