sveltejs/kit · error
Cannot prerender a +server file with ${BODY_DEPENDENT_METHOD
Error message
Cannot prerender a +server file with ${BODY_DEPENDENT_METHODS.join(', ')} handlers (${route.id}) What it means
Prerendering executes handlers at build time, where no request body exists. If a +server.js sets `export const prerender = true` but also defines POST/PUT/PATCH/DELETE handlers (methods that depend on the request body), SvelteKit throws because those handlers cannot be meaningfully prerendered.
Source
Thrown at packages/kit/src/core/postbuild/analyse.js:184
}
return { metadata };
}
/**
* @param {import('types').SSRRoute} route
* @param {import('types').SSREndpoint} mod
*/
function analyse_endpoint(route, mod) {
validate_server_exports(mod, route.id);
if (
mod.prerender &&
/** @type {import('types').HttpMethod[]} */ (BODY_DEPENDENT_METHODS).some(
(method) => mod[method]
)
) {
throw new Error(
`Cannot prerender a +server file with ${BODY_DEPENDENT_METHODS.join(', ')} handlers (${route.id})`
);
}
/** @type {Array<import('types').HttpMethod | '*'>} */
const methods = [];
for (const method of /** @type {import('types').HttpMethod[]} */ (ENDPOINT_METHODS)) {
if (mod[method]) methods.push(method);
}
if (mod.fallback) {
methods.push('*');
}
return {
config: mod.config,
entries: mod.entries,View on GitHub (pinned to 03f1687fe6)
Solutions
- Remove `export const prerender = true` from the +server.js file.
- Exclude the endpoint from inherited prerender by adding `export const prerender = false;` in that +server.js.
- If global prerender is on, restructure so body-dependent endpoints are outside the prerendered subtree.
Example fix
// before (+server.js)
export const prerender = true;
export const POST = async ({ request }) => { ... };
// after (+server.js)
export const prerender = false;
export const POST = async ({ request }) => { ... }; Defensive patterns
Strategy: validation
Validate before calling
const src = await fs.readFile('src/routes/api/+server.js', 'utf8');
const hasPrerender = /export\s+const\s+prerender\s*=\s*true/.test(src);
const bodyMethods = ['POST', 'PUT', 'PATCH', 'DELETE'].filter((m) =>
new RegExp(`export\\s+(async\\s+)?function\\s+${m}|export\\s+const\\s+${m}`).test(src)
);
if (hasPrerender && bodyMethods.length) {
throw new Error(`Cannot prerender +server with ${bodyMethods.join(', ')} handlers`);
} Try / catch
try {
await build();
} catch (e) {
if (String(e.message).includes('Cannot prerender a +server file')) {
console.error('Disable prerender on this endpoint (export const prerender = false):', e.message);
} else throw e;
} Prevention
- Never add `export const prerender = true` to API routes with POST/PUT/PATCH/DELETE.
- Opt out of inherited prerender with `export const prerender = false` in body-dependent +server.js files.
- When enabling global prerender, audit all +server.js routes for body-dependent handlers.
When it happens
Trigger: A +server.js with `export const POST = ...` (or PUT/PATCH/DELETE) plus `export const prerender = true`, or inheriting truthy prerender from kit config / a parent +layout.js while defining body-dependent methods.
Common situations: Enabling prerender globally (`prerender: { handleHttpError: ... }` with a blanket `export const prerender = true` in root +layout.js) while API routes with POST handlers live under the same route tree; adding prerender to an API route by copy-paste.
Related errors
- Page options are ignored when `router.type === 'hash'` (${no
- Cannot prerender a route with both +page and +server files (
- To suppress or handle this error, implement `${name}` in htt
- Could not create a fallback page
- ${message}. Since you're using @sveltejs/adapter-auto, Svelt
AI-assisted analysis of sveltejs/kit@03f1687fe6 (2026-09-02).
Data as JSON: /api/errors/f110bf261b054725.
Report an issue: GitHub.