Middleware in Next.js
Middlewares are code that runs before / after your request handler.
Commonly used for
- Analytics
- Authentication
- Redirecting [ In an Express App it is not applicables, cuz Express runs in backend ]
- Modifying the request/response
How
Create an middleware.ts, in the top level of yourfresh Next.js app.
You can only one have one middleware.ts where all your middlewares are defined. But you can still organize your middleware logic modularly & then importing them in middleware.ts file.
A Simple Middleware to count the number of Visitors on your site -
// This code will run on every request
import { NextRequest, NextResponse } from "next/server";
let requestCount = 0;
// Simply Define a function named middleware that takes req as parameter.
export default function middleware(req: NextRequest) {
requestCount++;
console.log("Number of Requests", requestCount);
return NextResponse.next();
}
But there is a problem.
Every time we visit the app the count get increased by many times, not 1. This is because Next.js made many request which will cause counter to increase many times.
)
There are 2 ways to avoid this
- Using Custom Matchers
Matcher allows you to filter Middleware to run on specific paths.
export const config = {
matcher: ["/api/:path*", "/"],
// matcher: "/api/:path*",
};
- Using Conditional Rendering
export default function middleware(req: NextRequest) {
//if (req.nextUrl.pathname === "/") {
// requestCount++;
// console.log("Number of Requests", requestCount);
// return NextResponse.next();
//}
if (
req.nextUrl.pathname.startsWith("/") ||
req.nextUrl.pathname.startsWith("/services")
) {
requestCount++;
console.log("Number of Requests", requestCount);
return NextResponse.next();
} else if (req.nextUrl.pathname.startsWith("/admin")) {
if (req.body.name !== "Jayant") {
return NextResponse.redirect(new URL("/", req.url));
} else {
return NextResponse.next();
}
} else {
NextResponse.next();
}
}
Ref : Next JS Middleware

Top comments (0)