Next.js Tutorial
Rate limiting for Next.js App Router and API Routes.
1. Installation
npm install halt-rate2. App Router (Middleware)
Use Next.js Middleware to rate limit entire paths.
// middleware.ts
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';
import { RateLimiter, InMemoryStore, presets } from 'halt-rate';
import { nextMiddleware } from 'halt-rate/next';
const limiter = new RateLimiter({
store: new InMemoryStore(),
policy: presets.PUBLIC_API
});
export async function middleware(request: NextRequest) {
const result = await nextMiddleware(limiter)(request);
if (result instanceof NextResponse) {
return result; // Blocked response
}
return NextResponse.next();
}
export const config = {
matcher: '/api/:path*',
};3. Route Handlers
Wrap individual route handlers.
// app/api/hello/route.ts
import { withHalt } from 'halt-rate/next';
import { presets } from 'halt-rate';
export const GET = withHalt(
async (req) => {
return Response.json({ message: "Hello" });
},
{ policy: presets.PUBLIC_API }
);