Next.js Middleware Error Handling

Show how to create and use Next.js middleware with proper error handling to intercept requests and manage errors before reaching the API routes or pages.
// middleware.js
import { NextResponse } from 'next/server';

export function middleware(request) {
  try {
    // Perform your checks here, for example, Auth check
    // If everything is OK, continue with the request
  } catch (error) {
    // Handle any error that occurred during the checks
    // You can return a custom error response or status code
    const customResponse = new Response('An error occurred', { status: 500 });
    return customResponse;
This is a middleware file named 'middleware.js'. It exports a function that takes a request object, performs some checks, and either allows the request to continue or returns a custom error response if an exception occurs.
// next.config.js
module.exports = {
  async rewrites() {
    return [
        source: '/api/:path*', 
        destination: '/api/:path*', // Matched parameters can be used in the destination
This is a 'next.config.js' configuration file where rewrites are defined for API routes. This setup is necessary for the middleware to apply to requests going to '/api/*' pattern URLs.
// pages/api/example.js
export default function handler(req, res) {
  try {
    // Handle the API logic
    res.status(200).json({ message: 'Success' });
  } catch (error) {
    // Handle errors that occur within the API Route
    res.status(500).json({ error: 'Internal Server Error' });
This is an example API route named 'example.js'. Inside the handler function, the try-catch block deals with potential errors that could occur when processing the request, returning a success response or an error response accordingly.
body {
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;

.error-message {
  color: red;
  font-weight: bold;
This is a CSS snippet to style the body of the document and any element with the class 'error-message'. 'error-message' is styled to have red, bold text.