tRPCttRPC
Powered by
jaiJ
tRPC•4y ago•
2 replies
jai

API Response caching not working on vercel ⁉

I've followed the instructions in https://trpc.io/docs/v9/caching for API Response caching and it's not working when hosted on vercel. The headers are getting set on localhost which tells me the code is working, but once it's hosted on vercel the cache headers aren't being set.

Does anyone have any ideas what's wrong?

My code (almost the exact same as the example shown here: https://trpc.io/docs/v9/caching#api-response-caching)
import { createNextApiHandler } from "@trpc/server/adapters/next"
import { appRouter, createContext } from "server"

const ONE_DAY = 60 * 60 * 24

export default createNextApiHandler({
  router: appRouter,
  createContext,
  onError({ error }) {
    console.error(error)
  },
  batching: { enabled: true },
  responseMeta({ ctx, errors, paths, type }) {
    const allPublic = paths && paths.every(path => path.includes("!"))
    const noErr = errors.length === 0
    const isQuery = type === "query"

    if (ctx?.res && allPublic && noErr && isQuery) {
      // Cache request for 1 day + revalidate once every second
      return {
        headers: {
          "Cache-Control": `s-maxage=1, stale-while-revalidate=${ONE_DAY}`,
        },
      }
    }
    return {}
  },
})
import { createNextApiHandler } from "@trpc/server/adapters/next"
import { appRouter, createContext } from "server"

const ONE_DAY = 60 * 60 * 24

export default createNextApiHandler({
  router: appRouter,
  createContext,
  onError({ error }) {
    console.error(error)
  },
  batching: { enabled: true },
  responseMeta({ ctx, errors, paths, type }) {
    const allPublic = paths && paths.every(path => path.includes("!"))
    const noErr = errors.length === 0
    const isQuery = type === "query"

    if (ctx?.res && allPublic && noErr && isQuery) {
      // Cache request for 1 day + revalidate once every second
      return {
        headers: {
          "Cache-Control": `s-maxage=1, stale-while-revalidate=${ONE_DAY}`,
        },
      }
    }
    return {}
  },
})


(first image is vercel's headers, the second is from localhost)
unknown.png
unknown.png
Response Caching | tRPC
The below examples uses Vercel's edge caching to serve data to your users as fast as possible.
Response Caching | tRPC
tRPCJoin
Move Fast & Break Nothing. End-to-end typesafe APIs made easy.
5,015Members
Resources
Recent Announcements

Similar Threads

Was this page helpful?

Similar Threads

Caching API calls (HTTP response)
Answer OverflowAAnswer Overflow / ❓-help
2y ago
tRPC caching vs Vercel dynamic edge caching
VengeanceVVengeance / ❓-help
4y ago
Transform server response on the client before caching
João BezerraJJoão Bezerra / ❓-help
2y ago
Caching a middleware response during batching
mike_buildsMmike_builds / ❓-help
9mo ago