๐Ÿ“š Reference


๐Ÿ“œ Chapter


Multi middleware


์˜ˆ์‹œ


import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';
import { localeMiddleware } from './middlewares/locale';
import { themeMiddleware } from './middlewares/theme';

const composeMiddlewares = (
  middlewares: Array<
    (req: NextRequest) => NextResponse | Promise<NextResponse>
  >,
) => {
  return (req: NextRequest) => {
    const initialResponse = Promise.resolve(NextResponse.next());
    return middlewares.reduce(async (prevPromise, middleware) => {
      const res = await prevPromise;
      if (res?.status >= 300 && res?.status < 400) {
        return res;
      } else {
        return middleware(req);
      }
    }, initialResponse);
  };
};

export async function middleware(request: NextRequest) {
  const middlewares = [localeMiddleware, themeMiddleware];
  return await composeMiddlewares(middlewares)(request);
}

export const config = {
  matcher: ['/((?!api|_next/static|_next/image|favicon.ico).*)'],
};