extendPages在 Nuxt 中,路由是根据 app/pages 目录中文件的结构自动生成的。然而,在某些情况下,您可能希望自定义这些路由。例如,您可能需要为 Nuxt 未生成的动态页面添加路由、删除现有路由或修改路由的配置。对于此类自定义,Nuxt 提供了 extendPages 功能,允许您扩展和更改页面配置。
import { createResolver, defineNuxtModule, extendPages } from '@nuxt/kit'
export default defineNuxtModule({
setup (options) {
const { resolve } = createResolver(import.meta.url)
extendPages((pages) => {
pages.unshift({
name: 'prismic-preview',
path: '/preview',
file: resolve('runtime/preview.vue'),
})
})
},
})
function extendPages (callback: (pages: NuxtPage[]) => void): void
callback:一个将使用页面配置调用的函数。您可以通过添加、删除或修改其元素来更改此数组。注意:您应该直接修改提供的页面数组,因为对复制数组所做的更改不会反映在配置中。
| 属性 | 类型 | 必需 | 描述 |
|---|---|---|---|
name | string | false | 路由的名称。对以编程方式导航和识别路由很有用。 |
path | string | false | 路由的 URL 路径。如果未设置,Nuxt 将从文件位置推断它。 |
file | string | false | 用作路由组件的 Vue 文件的路径。 |
meta | Record<string, any> | false | 路由的自定义元数据。可用于布局、中间件或导航守卫中。 |
alias | string[] | string | false | 一个或多个路由的别名路径。有助于支持多个 URL。 |
redirect | RouteLocationRaw | false | 路由的重定向规则。支持命名路由、对象或字符串路径。 |
children | NuxtPage[] | false | 此路由下的嵌套子路由,用于布局或视图嵌套。 |
extendRouteRulesNuxt 由Nitro服务器引擎提供支持。使用 Nitro,您可以直接在配置中加入高级逻辑,这对于重定向、代理、缓存和向路由追加标头等操作非常有用。此配置通过将路由模式与特定的路由设置关联起来工作。
import { createResolver, defineNuxtModule, extendPages, extendRouteRules } from '@nuxt/kit'
export default defineNuxtModule({
setup (options) {
const { resolve } = createResolver(import.meta.url)
extendPages((pages) => {
pages.unshift({
name: 'preview-new',
path: '/preview-new',
file: resolve('runtime/preview.vue'),
})
})
extendRouteRules('/preview', {
redirect: {
to: '/preview-new',
statusCode: 302,
},
})
extendRouteRules('/preview-new', {
cache: {
maxAge: 60 * 60 * 24 * 7,
},
})
},
})
function extendRouteRules (route: string, rule: NitroRouteConfig, options?: ExtendRouteRulesOptions): void
route:一个要匹配的路由模式。
rule:要应用于匹配到的路由的路由规则配置。
options:一个传递给路由配置的对象。如果 override 设置为 true,它将覆盖现有的路由配置。
| 名称 | 类型 | 默认 | 描述 |
|---|---|---|---|
override | boolean | false | 覆盖路由规则配置,默认为 false |
addRouteMiddleware注册路由中间件,使其可用于所有路由或特定路由。
路由中间件也可以通过 addRouteMiddleware Composable 在插件中定义。
import { addRouteMiddleware, createResolver, defineNuxtModule } from '@nuxt/kit'
export default defineNuxtModule({
setup () {
const { resolve } = createResolver(import.meta.url)
addRouteMiddleware({
name: 'auth',
path: resolve('runtime/auth'),
global: true,
}, { prepend: true })
},
})
export default defineNuxtRouteMiddleware((to, from) => {
// isAuthenticated() is an example method verifying if a user is authenticated
if (to.path !== '/login' && isAuthenticated() === false) {
return navigateTo('/login')
}
})
function addRouteMiddleware (input: NuxtMiddleware | NuxtMiddleware[], options?: AddRouteMiddlewareOptions): void
input:一个中间件对象或一个包含以下属性的中间件对象数组
| 属性 | 类型 | 必需 | 描述 |
|---|---|---|---|
name | string | true | 中间件的名称。 |
path | string | true | 中间件的文件路径。 |
global | boolean | false | 如果设置为 true,则将中间件应用于所有路由。 |
options:一个包含以下属性的对象
| 属性 | 类型 | 默认 | 描述 |
|---|---|---|---|
override | boolean | false | 如果为 true,则会替换同名的中间件。 |
prepend | boolean | false | 如果为 true,则在现有中间件之前添加中间件。 |