TanStackT
TanStackโ€ข12mo agoโ€ข
29 replies
ordinary-sapphire

Cloudflare Pages prod env vars inconsistently retrieved

Hi folks, I've seen a number of threads related to Cloudflare env variables and a number of example GitHub repos, but I'm still seeing inconsistent behavior when deployed to Cloudflare, specifically:

1. Public env vars like import.meta.env.VITE_BETTER_AUTH_URL that appear populated in the Cloudflare console for the worker are
undefined
at execution time
2. getContext("cloudflare") seems to inconsistently return
undefined
in general which creates bugs in my application

Any idea what I'm doing wrong?

I've pasted some code below and attached some files (Please let me know if I can provide any additional context).

// app/src/lib/server/middleware/session.server.ts

export const sessionMiddleware = createMiddleware().server(async ({ next }) => {
  const request = getWebRequest();
  if (!request) {
    throw new Error("Request not found");
  }
  const event = getEvent();
  const auth = createAuth(event.context.env);
  const session = await auth.api.getSession({ headers: request.headers });
  const isAuthenticated = !!session;
  return next({
    context: {
      auth,
      isAuthenticated,
    },
  });
});


// app/app.config.ts

const tanstackApp = defineConfig({
  ....
});

const routers = tanstackApp.config.routers.map((r) => {
  return {
    ...r,
    middleware:
      r.target === "server"
        ? "src/lib/server/middleware/requests/env.server.ts"
        : undefined,
  };
});

const app: App = {
  ...tanstackApp,
  config: {
    ...tanstackApp.config,
    routers: routers,
  },
};

export default app;


// app/src/lib/server/middleware/requests/env.server.ts

export default defineMiddleware({
  onRequest: async (event) => {
    const runtimeEnv = getRuntimeEnv();
    event.context.env = createServerEnv(runtimeEnv);
  },
});

function getRuntimeEnv() {
  const cfContext = getContext("cloudflare");

  if (cfContext && cfContext.env) {
    return cfContext.env;
  } else {
    return process.env;
  }
}
Was this page helpful?