diff --git a/docs/2.guide/2.directory-structure/1.middleware.md b/docs/2.guide/2.directory-structure/1.middleware.md index d486e96b01ef..e68ca81c8220 100644 --- a/docs/2.guide/2.directory-structure/1.middleware.md +++ b/docs/2.guide/2.directory-structure/1.middleware.md @@ -171,3 +171,31 @@ definePageMeta({ Now, before navigation to that page can complete, the `auth` route middleware will be run. :link-example{to="/docs/examples/routing/middleware"} + +## Setting Middleware At Build Time + +Instead of using `definePageMeta` on each page, you can add named route middleware within the `pages:extend` hook. + +```ts [nuxt.config.ts] +import type { NuxtPage } from 'nuxt/schema' + +export default defineNuxtConfig({ + hooks: { + 'pages:extend' (pages) { + function setMiddleware (pages: NuxtPage[]) { + for (const page of pages) { + if (/* some condition */ true) { + page.meta ||= {} + // Note that this will override any middleware set in `definePageMeta` in the page + page.meta.middleware = ['named'] + } + if (page.children) { + setMiddleware(page.children) + } + } + } + setMiddleware(pages) + } + } +}) +```