๐ Reference
๐ Chapter
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).*)'],
};