DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Refcards Trend Reports
Events Video Library
Refcards
Trend Reports

Events

View Events Video Library

Related

  • The Invisible Risk in Your Middleware: A Next.js Flaw You Shouldn’t Ignore
  • Advanced Middleware Architecture For Secure, Auditable, and Reliable Data Exchange Across Systems
  • Laravel + Next.js Integration Guide (Real-World Setup, 2025)
  • React Server Components in Next.js 15: A Deep Dive

Trending

  • RAG Done Right: When to Use SQL, Search, and Vector Retrieval and How To Combine Them
  • Understanding MCP Architecture: LLM + API vs Model Context Protocol
  • A Comprehensive Guide to Prompt Engineering
  • Ingesting Fixed-Width Mainframe Files Into Delta Lake: The Details Nobody Writes Down
  1. DZone
  2. Coding
  3. JavaScript
  4. Introduction to Next.js Middleware: How It Works With Examples

Introduction to Next.js Middleware: How It Works With Examples

Next.js middleware lets you handle requests before they hit your routes. Use it for tasks like redirects and authentication, with examples to guide you.

By 
Sheraz Manzoor user avatar
Sheraz Manzoor
·
Oct. 16, 24 · Tutorial
Likes (2)
Comment
Save
Tweet
Share
6.2K Views

Join the DZone community and get the full member experience.

Join For Free

Let's talk about routing in Next.js. Today, we will talk about the one of most powerful things: middleware. Middleware in Next.js offers a powerful and flexible way both to intercept requests from the server and control request flow (redirects, URL rewriting) and globally enhance features like authentication, headers, and cookie persistence.

Creating Middleware

Let's create a Middleware Next.js application. First of all, we'll create a new file for middleware like middleware.js or middleware.ts, in the src folder. Middleware in Next.js then needs to allow you fine control over where it will be active (ie custom matcher configuration, or using isXXX functions)

Redirecting

Using redirection as an example, let's imagine a scenario where navigating to /profile should redirect the user to the homepage. With the custom matcher configuration approach, we can achieve this by importing the necessary types, defining a middleware function, and specifying the matcher configuration:

JavaScript
 
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';

export function middleware(request: NextRequest) {  return NextResponse.redirect(request.url.replace('/profile', '/'));
}

export const config = {  matcher: '/profile',
};


In this example, the middleware function checks if the request URL path is /profile and redirects the user to the homepage.

For the conditional statement approach, we can modify the code as follows:

JavaScript
 
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';

export function middleware(request: NextRequest) {  if (request.nextUrl.pathname === '/profile') {    return NextResponse.redirect('/hello');  }  return NextResponse.next();
}


In this case, the middleware checks the request URL path and redirects the user to the /hello route if the path is /profile.

Middleware in Next.js goes beyond just handling redirections. It also allows for URL rewrites, which can be useful for legacy URL support or SEO optimization. By changing redirect to rewrite in the previous examples, the URL in the browser will stay the same (/profile), but the response content will change to the content from the /hello route.

Using Cookies

Lastly, let's explore the use of cookies and headers in middleware. We can modify our middleware to handle user preferences for themes and add a custom header for all responses:

JavaScript
 
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';

export function middleware(request: NextRequest) {  const response = NextResponse.next();
  // Handle user theme preference  const themePreference = request.cookies.get('theme');  if (!themePreference) {    response.cookies.set('theme', 'dark');  }
  // Add a custom header  response.headers.set('Custom-Header', 'Custom Value');
  return response;
}


In this example, we first check if the user has a theme preference stored in a cookie. If not, we set the theme to 'dark' by adding a cookie. Then, we add a custom header to the response, which can be useful for passing additional information or for debugging purposes.

As you can see, middleware in Next.js is a powerful tool that allows you to effectively control and intercept the request-response cycle, enabling redirects, URL rewrites, and the manipulation of headers and cookies. By mastering middleware, you can enhance the routing experience in your Next.js applications and create more robust and customizable user experiences.

"Middleware in Next.js is a powerful feature that offers a robust way to intercept and control the flow of requests and responses within your applications." — Next.js Documentation

Conclusion

In summary, we've learned how to define middleware in Next.js, explore the two main approaches (custom matcher configuration and conditional statements), and apply middleware to handle redirections, URL rewrites, and the management of cookies and headers. This knowledge will help you take your Next.js applications to the next level by leveraging the flexibility and control that middleware provides.

Next.js Middleware

Published at DZone with permission of Sheraz Manzoor. See the original article here.

Opinions expressed by DZone contributors are their own.

Related

  • The Invisible Risk in Your Middleware: A Next.js Flaw You Shouldn’t Ignore
  • Advanced Middleware Architecture For Secure, Auditable, and Reliable Data Exchange Across Systems
  • Laravel + Next.js Integration Guide (Real-World Setup, 2025)
  • React Server Components in Next.js 15: A Deep Dive

Partner Resources

×

Comments

The likes didn't load as expected. Please refresh the page and try again.

  • RSS
  • X
  • Facebook

ABOUT US

  • About DZone
  • Support and feedback
  • Community research

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 215
  • Nashville, TN 37211
  • [email protected]

Let's be friends:

  • RSS
  • X
  • Facebook