{"record":{"id":"9b171bb9a246e02e","repo":"withastro/astro","slug":"context-params-don-t-contain-any-usable-content-in","errorCode":null,"errorMessage":"context.params don't contain any usable content in Astro.","messagePattern":"context\\.params don't contain any usable content in Astro\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/integrations/netlify/src/index.ts","lineNumber":604,"sourceCode":"\t\t\t\t\t? req.headers['x-nf-client-connection-ip']\n\t\t\t\t\t: (req.socket.remoteAddress ?? '127.0.0.1'),\n\t\t\tserver: {\n\t\t\t\tregion: 'local-dev',\n\t\t\t},\n\t\t\trequestId:\n\t\t\t\ttypeof req.headers['x-nf-request-id'] === 'string'\n\t\t\t\t\t? req.headers['x-nf-request-id']\n\t\t\t\t\t: 'mock-netlify-request-id',\n\t\t\tget cookies(): never {\n\t\t\t\tthrow new Error('Please use Astro.cookies instead.');\n\t\t\t},\n\t\t\tjson: (input) => Response.json(input),\n\t\t\tlog: console.info,\n\t\t\tnext: () => {\n\t\t\t\tthrow new Error('`context.next` is not implemented for serverless functions');\n\t\t\t},\n\t\t\tget params(): never {\n\t\t\t\tthrow new Error(\"context.params don't contain any usable content in Astro.\");\n\t\t\t},\n\t\t\trewrite() {\n\t\t\t\tthrow new Error('context.rewrite is not available in Astro.');\n\t\t\t},\n\t\t};\n\n\t\treturn context;\n\t}\n\n\tlet routes: IntegrationResolvedRoute[];\n\n\treturn {\n\t\tname: '@astrojs/netlify',\n\t\thooks: {\n\t\t\t'astro:config:setup': async ({ config, updateConfig, logger, command }) => {\n\t\t\t\trootDir = config.root;\n\t\t\t\tawait cleanFunctions();\n","sourceCodeStart":586,"sourceCodeEnd":622,"githubUrl":"https://github.com/withastro/astro/blob/d081033d5fe8e8a68c4bbbad4af9d2deb9c74bca/packages/integrations/netlify/src/index.ts#L586-L622","documentation":"In the dev mock context, `params` is `get params(): never` that throws because Astro owns route params via `Astro.params`. Netlify's `context.params` (used for catch-all routes in Netlify Functions) carries no usable data in Astro's routing model and is intentionally disabled.","triggerScenarios":"Reading `context.params` in an Astro handler in dev. Reused Netlify Function code that destructures `context.params`. Debug enumeration of the context object.","commonSituations":"Porting Netlify catch-all Function code. Code written against Netlify's `context.params.something` pattern.","solutions":["Use `Astro.params` for route parameters.","Use `Astro.url.searchParams` for query string.","Remove reads of `context.params` from dev paths."],"exampleFix":"// before\nconst { slug } = context.params;\n\n// after\nconst { slug } = Astro.params;","handlingStrategy":"validation","validationCode":"function getParams(Astro: any): Record<string, string> {\n  return Astro.params;\n}","typeGuard":"function hasAstroParams(Astro: any): Astro is { params: Record<string, string | undefined> } {\n  return !!Astro?.params && typeof Astro.params === 'object';\n}","tryCatchPattern":null,"preventionTips":["Read route params via `Astro.params`.","Use `Astro.url.searchParams` for query strings.","Do not read `context.params` in Astro handlers."],"tags":["netlify","dev-server","routing","deprecation"],"backgroundTag":null,"analyzedSha":"d081033d5fe8e8a68c4bbbad4af9d2deb9c74bca","analyzedAt":"2026-08-12T13:37:29.035Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}