Page with fetch request is still statically generated even though { cache: "no-store" } is added
Unanswered
Atlantic menhaden posted this in #help-forum

Atlantic menhadenOP
Hi 👋 I have a very basic page (Next 13.5.6, app router) that makes a request to an external API for some data for the page. When I make the fetch request, I add the
https://nextjs.org/docs/app/api-reference/functions/fetch
https://nextjs.org/docs/app/building-your-application/upgrading/app-router-migration#server-side-rendering-getserversideprops
Therefore my understanding is that this should be enough to make the page SSR-only. However, when I run
I have since discovered that if you add
Are the docs inaccurate, or is my understanding lacking? Or is this a feature rather than a bug?
{ cache: "no-store" }
option as mentioned in the docs here:https://nextjs.org/docs/app/api-reference/functions/fetch
https://nextjs.org/docs/app/building-your-application/upgrading/app-router-migration#server-side-rendering-getserversideprops
Therefore my understanding is that this should be enough to make the page SSR-only. However, when I run
next build
, it tries to statically generate the page, and if the API isn't available to the machine running the build command (e.g. a build server and live deployment might have access, but not locally for business reasons) then the build fails. Here is my example code:import styles from "./page.module.scss";
async function getData() {
const res = await fetch("http://restricted-api.example.com/status", { cache: "no-store" });
if (!res.ok) {
throw new Error("Failed to fetch");
}
return res.json();
}
export default async function Home() {
const data = await getData();
return (
<main className={styles.main}>
<h1>Home</h1>
<p>{JSON.stringify(data)}</p>
</main>
);
}
I have since discovered that if you add
export const revalidate = 0;
or export const dynamic = 'force-dynamic';
to the page then it will definitely be SSR-only, but this seems somewhat unintuitive and not having mention of it in the two places I linked seems like an omission.Are the docs inaccurate, or is my understanding lacking? Or is this a feature rather than a bug?