Lopais
Lopais4w ago

tRPC + Nextjs: redirect on next error with new TanStack Query integration

Using a tRPC middleware like this that throws a Nextjs error: export const withSessionProcedure = t.procedure .use(timingMiddleware) .use(({ next, ctx: { session, ...rest } }) => { if (!session) { redirect($path({ route: "/sign-in" })); } return next({ ctx: { session, ...rest }, }); }); I had a working SSR setup with the old TanStack Query integration, where error / redirect is handled directly the API was called: export const api = createCallerFactory(appRouter)(createContext, { onError({ error }) { // this handled the "redirect" error above unstable_rethrow(error); throw error; }, }); Migrating over to the new tanstack query integration, I now perform tRPC calls during SSR with a queryClient: export const createQueryClient = () => new QueryClient({ defaultOptions: { queries: { staleTime: 30 * 1000, }, dehydrate: { serializeData: SuperJSON.serialize, shouldDehydrateQuery: (query) => defaultShouldDehydrateQuery(query) || query.state.status === "pending", }, hydrate: { deserializeData: SuperJSON.deserialize, }, }, }); export const getQueryClient = cache(createQueryClient); page.tsx: import { getQueryClient, HydrateClient, trpc } from "@/trpc/server"; import { StaffView } from "./view"; export default async function StaffPage() { const queryClient = getQueryClient(); await queryClient.prefetchQuery(trpc.staff.general.list.queryOptions()); return ( <HydrateClient> <StaffView /> </HydrateClient> ); } This just throws a "TRPCError: NEXT_REDIRECT" now though. I am looking to get back the functionality I had with the old TanStack Query integration, but can't find where to catch and handle the error before it throws on the queryClient using the new integration.
0 Replies
No replies yetBe the first to reply to this messageJoin

Did you find this page helpful?