{"record":{"id":"f110bf261b054725","repo":"sveltejs/kit","slug":"cannot-prerender-a-server-file-with-body-depend","errorCode":null,"errorMessage":"Cannot prerender a +server file with ${BODY_DEPENDENT_METHODS.join(', ')} handlers (${route.id})","messagePattern":"Cannot prerender a \\+server file with (.+?) handlers \\((.+?)\\)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/kit/src/core/postbuild/analyse.js","lineNumber":184,"sourceCode":"\t}\n\n\treturn { metadata };\n}\n\n/**\n * @param {import('types').SSRRoute} route\n * @param {import('types').SSREndpoint} mod\n */\nfunction analyse_endpoint(route, mod) {\n\tvalidate_server_exports(mod, route.id);\n\n\tif (\n\t\tmod.prerender &&\n\t\t/** @type {import('types').HttpMethod[]} */ (BODY_DEPENDENT_METHODS).some(\n\t\t\t(method) => mod[method]\n\t\t)\n\t) {\n\t\tthrow new Error(\n\t\t\t`Cannot prerender a +server file with ${BODY_DEPENDENT_METHODS.join(', ')} handlers (${route.id})`\n\t\t);\n\t}\n\n\t/** @type {Array<import('types').HttpMethod | '*'>} */\n\tconst methods = [];\n\n\tfor (const method of /** @type {import('types').HttpMethod[]} */ (ENDPOINT_METHODS)) {\n\t\tif (mod[method]) methods.push(method);\n\t}\n\n\tif (mod.fallback) {\n\t\tmethods.push('*');\n\t}\n\n\treturn {\n\t\tconfig: mod.config,\n\t\tentries: mod.entries,","sourceCodeStart":166,"sourceCodeEnd":202,"githubUrl":"https://github.com/sveltejs/kit/blob/03f1687fe612ce3d2d9131139b5b188d9cf90c64/packages/kit/src/core/postbuild/analyse.js#L166-L202","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before (+server.js)\nexport const prerender = true;\nexport const POST = async ({ request }) => { ... };\n// after (+server.js)\nexport const prerender = false;\nexport const POST = async ({ request }) => { ... };","handlingStrategy":"validation","validationCode":"const src = await fs.readFile('src/routes/api/+server.js', 'utf8');\nconst hasPrerender = /export\\s+const\\s+prerender\\s*=\\s*true/.test(src);\nconst bodyMethods = ['POST', 'PUT', 'PATCH', 'DELETE'].filter((m) =>\n  new RegExp(`export\\\\s+(async\\\\s+)?function\\\\s+${m}|export\\\\s+const\\\\s+${m}`).test(src)\n);\nif (hasPrerender && bodyMethods.length) {\n  throw new Error(`Cannot prerender +server with ${bodyMethods.join(', ')} handlers`);\n}","typeGuard":null,"tryCatchPattern":"try {\n  await build();\n} catch (e) {\n  if (String(e.message).includes('Cannot prerender a +server file')) {\n    console.error('Disable prerender on this endpoint (export const prerender = false):', e.message);\n  } else throw e;\n}","preventionTips":["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."],"tags":["prerender","server","build"],"backgroundTag":"invalid-prerender-target","analyzedSha":"03f1687fe612ce3d2d9131139b5b188d9cf90c64","analyzedAt":"2026-09-02T02:01:50.504Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-09T06:17:21.866Z"}