withastro/astro · error · Error

`context.next` is not implemented for serverless functions

Error message

`context.next` is not implemented for serverless functions

What it means

In the dev mock context, `next` is a function that always throws `'context.next is not implemented for serverless functions'`. Netlify's `context.next()` (used for Next.js-style middleware chaining) has no equivalent in Astro's request lifecycle, and the serverless adapter does not implement it.

Source

Thrown at packages/integrations/netlify/src/index.ts:601

			},
			ip:
				typeof req.headers['x-nf-client-connection-ip'] === 'string'
					? req.headers['x-nf-client-connection-ip']
					: (req.socket.remoteAddress ?? '127.0.0.1'),
			server: {
				region: 'local-dev',
			},
			requestId:
				typeof req.headers['x-nf-request-id'] === 'string'
					? req.headers['x-nf-request-id']
					: 'mock-netlify-request-id',
			get cookies(): never {
				throw new Error('Please use Astro.cookies instead.');
			},
			json: (input) => Response.json(input),
			log: console.info,
			next: () => {
				throw new Error('`context.next` is not implemented for serverless functions');
			},
			get params(): never {
				throw new Error("context.params don't contain any usable content in Astro.");
			},
			rewrite() {
				throw new Error('context.rewrite is not available in Astro.');
			},
		};

		return context;
	}

	let routes: IntegrationResolvedRoute[];

	return {
		name: '@astrojs/netlify',
		hooks: {
			'astro:config:setup': async ({ config, updateConfig, logger, command }) => {

View on GitHub (pinned to d081033d5f)

Solutions

  1. Do not call `context.next()` in Astro; use middleware's `next()` argument from Astro's own middleware signature instead.
  2. Return a `Response` or call Astro's middleware `next()` rather than Netlify's.
  3. Refactor ported Netlify middleware to Astro middleware conventions.

Example fix

// before (Netlify-style)
return context.next();

// after (Astro middleware)
return next();
Defensive patterns

Strategy: validation

Validate before calling

// Do not call context.next() in Astro handlers.
// For middleware, use the Astro-provided next():
export function onRequest(context, next) {
  return next();
}

Type guard

function isAstroMiddlewareNext(fn: unknown): fn is () => Promise<Response> {
  return typeof fn === 'function';
}

Prevention

When it happens

Trigger: Calling `context.next()` inside an Astro handler or middleware in dev. Reusing Netlify Edge Function code that calls `next()` to continue a chain.

Common situations: Porting Next-on-Netlify or Edge Function patterns that depend on `context.next()`. Middleware that calls next instead of returning.

Related errors


AI-assisted analysis of withastro/astro@d081033d5f (2026-08-12). Data as JSON: /api/errors/99bd96fccc90ea51. Report an issue: GitHub.