title: Nuxt Kit 中的页面和路由管理

date: 2024/9/17

updated: 2024/9/17

author: cmdragon

excerpt:

摘要:本文介绍了Nuxt Kit中页面和路由管理的高级功能,包括extendPages自定义页面路由、extendRouteRules定义复杂路由逻辑及addRouteMiddleware注册路由中间件。通过这些功能,开发者能够灵活地添加、修改路由,设置缓存、重定向等,并实现访问控制等中间件处理,以提升Web应用的开发效率和可维护性。

categories:

  • 前端开发

tags:

  • Nuxt
  • 路由
  • 管理
  • 中间件
  • 缓存
  • 重定向
  • 动态



扫描二维码关注或者微信搜一搜:编程智域 前端至全栈交流与成长

在构建现代 Web 应用时,路由管理是一个核心功能。Nuxt.js 提供了一系列强大且灵活的工具来帮助您创建和管理页面及其路由。

1. extendPages:自定义页面路由

1.1 功能说明

extendPages 允许您根据需要添加、删除或修改自动生成的路由。默认情况下,Nuxt 会自动根据 pages 目录中的文件结构生成路由,但有时您可能需要更复杂的路由逻辑。

1.2 类型签名

function extendPages(callback: (pages: NuxtPage[]) => void): void

参数

  • callback: 一个函数,该函数接受一个 NuxtPage 数组作为参数,您可以对该数组进行修改。

1.3 NuxtPage 接口

type NuxtPage = {
name?: string; // 可选的姓名
path: string; // 路由路径
file?: string; // 关联的文件路径
meta?: Record<string, any>; // 路由元数据
alias?: string[] | string; // 别名
redirect?: RouteLocationRaw; // 重定向配置
children?: NuxtPage[]; // 子路由
}

1.4 示例

下面是如何使用 extendPages 添加新路由的完整示例:

// my-module.ts
import { createResolver, defineNuxtModule, extendPages } from '@nuxt/kit'; export default defineNuxtModule({
setup(options) {
const resolver = createResolver(import.meta.url); extendPages((pages) => {
pages.unshift({
name: 'custom-preview',
path: '/custom-preview',
file: resolver.resolve('runtime/customPreview.vue'), // 指向组件文件
});
});
}
});

1.5 实际应用场景

  • 动态路由: 如果有不在 pages 目录中的动态路由(如用户配置的路由),您可以使用此功能来添加这些路由。
  • 修改默认路由: 有时,您可能希望更改或删除默认路由,以满足特定需求。

2. extendRouteRules:定义复杂路由逻辑

2.1 功能说明

extendRouteRules 允许您在 Nitro 服务器引擎中定义复杂的路由逻辑,包括缓存、重定向、代理等。

2.2 类型签名

function extendRouteRules(route: string, rule: NitroRouteConfig, options: ExtendRouteRulesOptions): void

参数

  • route: 要匹配的路由模式。
  • rule: 应用到匹配路由的规则配置。
  • options: 传递给配置的可选参数,是否覆盖已有配置。

2.3 NitroRouteConfig 接口

interface NitroRouteConfig {
cache?: CacheOptions | false; // 缓存设置
headers?: Record<string, string>; // HTTP 头
redirect?: string | { to: string; statusCode?: HTTPStatusCode }; // 重定向
prerender?: boolean; // 预渲染设置
proxy?: string | ({ to: string } & ProxyOptions); // 代理设置
isr?: number | boolean; // 增量静态再生设置
cors?: boolean; // CORS 支持
swr?: boolean | number; // 重新验证请求
static?: boolean | number; // 静态请求设置
}

2.4 示例

以下是设置重定向和缓存的完整示例:

// redirects.ts
import { createResolver, defineNuxtModule, extendRouteRules, extendPages } from '@nuxt/kit'; export default defineNuxtModule({
setup(options) {
const resolver = createResolver(import.meta.url); extendPages((pages) => {
pages.unshift({
name: 'new-preview',
path: '/new-preview',
file: resolver.resolve('runtime/newPreview.vue'),
});
}); extendRouteRules('/preview', {
redirect: {
to: '/new-preview',
statusCode: 302, // 301 为永久重定向,302 为临时重定向
},
}); extendRouteRules('/new-preview', {
cache: {
maxAge: 60 * 60 * 24, // 设置缓存时间为一天
},
});
}
});

2.5 实际应用场景

  • SEO 优化: 重定向旧路由至新路由,可改善用户体验和 SEO 性能。
  • 缓存控制: 根据内容的变化设置不同的缓存策略,提高应用性能。

3. addRouteMiddleware:注册路由中间件

3.1 功能说明

addRouteMiddleware 允许您注册一个或多个中间件以处理路由请求,如身份验证、权限检查等。

3.2 类型签名

function addRouteMiddleware(input: NuxtMiddleware | NuxtMiddleware[], options: AddRouteMiddlewareOptions): void

参数

  • input: 中间件对象或中间件对象数组,必须包含名称和路径。
  • options: 可选参数,控制是否覆盖已有中间件。

3.3 NuxtMiddleware 类型

type NuxtMiddleware = {
name: string; // 中间件名称
path: string; // 中间件路径
global?: boolean; // 是否为全局中间件
}

3.4 示例代码

以下是一个身份验证中间件示例:

// runtime/auth.ts
export default defineNuxtRouteMiddleware((to, from) => {
if (to.path !== '/login' && !isAuthenticated()) {
return navigateTo('/login'); // 如果用户未认证,则导航到登录页
}
});

3.5 实际应用场景

  • 访问控制: 检查用户是否已登录,控制访问某些敏感页面。
  • 日志跟踪: 记录请求日志,便于后续分析和调试。

4. 代码结构示例

以下是一个简单的 Nuxt 模块的代码结构示例,结合前面的概念:

// my-module.ts
import { createResolver, defineNuxtModule, extendPages, extendRouteRules, addRouteMiddleware } from '@nuxt/kit'; export default defineNuxtModule({
setup(options) {
const resolver = createResolver(import.meta.url); // 拓展页面路由
extendPages((pages) => {
pages.unshift({
name: 'example',
path: '/example',
file: resolver.resolve('runtime/example.vue'),
});
}); // 拓展路由规则
extendRouteRules('/home', {
redirect: {
to: '/example',
statusCode: 301,
},
}); // 添加中间件
addRouteMiddleware(
{ name: 'auth', path: '/auth', global: true },
{ override: true }
);
}
});

通过这个示例,您可以看到如何将多个功能结合在一个模块中,实现复杂的路由逻辑和功能。

总结

Nuxt Kit 提供的页面和路由管理功能极为强大,可以满足各种开发需求。通过 extendPagesextendRouteRulesaddRouteMiddleware,开发者可以自由地修改和扩展应用的路由逻辑。在构建大型应用时,这些工具可以极大地提高开发效率和应用的可维护性。

余下文章内容请点击跳转至 个人博客页面 或者 扫码关注或者微信搜一搜:编程智域 前端至全栈交流与成长,阅读完整的文章:Nuxt Kit 中的页面和路由管理 | cmdragon's Blog

往期文章归档:

Nuxt Kit 中的页面和路由管理的更多相关文章

  1. WebApp中的页面生命周期及路由管理

    最近切换到一个新项目,使用的技术栈是Require+Backbone,鉴于对鞋厂webapp框架的了解,发现这个新项目有些缺陷,主要是单纯依赖Backbone造成的,也就是Backbone的好和坏都在 ...

  2. vue 路由传参中刷新页面参数丢失 及传参的几种方式?

    在页面跳转中,我通过路由传参,结果发现页面参数丢失了.路径返回了根目录.... 1. 先说下路由传参的几种方式吧? 比如:<div v-for="item in items" ...

  3. 处理ASP.NET Core中的HTML5客户端路由回退

    在使用由Angular,React,Vue等应用程序框架构建的客户端应用程序时,您总是会处理HTML5客户端路由,它将完全在浏览器中处理到页面和组件的客户端路由.几乎完全在浏览器中... HTML5客 ...

  4. nignx部署Vue单页面刷新路由404问题解决

    官网说明: https://router.vuejs.org/zh/guide/essentials/history-mode.html#%E8%AD%A6%E5%91%8A 在linux下搭建ngi ...

  5. vue路由管理-保留滚动位置功能、按需加载模块名自定义

    路由管理:保留滚动位置 其实现与组件的keep-alive相关,仅设置了keep-aive的页面,实施保留回退位置能力. keep-alive介绍 作用 把切换出去的组件保留在内存中,可以保留它的状态 ...

  6. 通过路由管理视图间切换 - AngularJS路由解析

    模板的视图刷新 ng-view这个指令和路由组合之后就可以将$route对应的视图放入指定的HTML中,这一过程中它会创建自己的作用域并将模板嵌套在内部. ng-view指令的优先级是1000(终极) ...

  7. 6.2.初识Flutter应用之路由管理

    路由管理 路由(Route)在移动开发中通常指页面(Page),这跟web开发中单页应用的Route概念意义是相同的,Route在Android中通常指一个Activity,在iOS中指一个ViewC ...

  8. iOS中基于协议的路由设计

    一.背景 前段时间对我们自己的App做了结构上的重构,抛弃了之前简单的MVC开发模式,原因是随着App的业务线越来越多,单个页面的功能越来越复杂,MVC开发模式导致整个Controller-layer ...

  9. Vue路由管理之Vue-router

    一.Vue Router介绍 Vue Router 是 Vue.js 官方的路由管理器.它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌.包含的功能有: 嵌套的路由/视图表 模块化的. ...

  10. Vue Router路由管理器介绍

    参考博客:https://www.cnblogs.com/avon/p/5943008.html 安装介绍:Vue Router 版本说明 对于 TypeScript 用户来说,vue-router@ ...

随机推荐

  1. leetcode简单(设计):[225, 232, 303, 703, 705, 706, 933, 1603, 1656, 09, 30, 041, 03.06]

    目录 225. 用队列实现栈(先入后出) 232. 用栈实现队列(先入先出) 303. 区域和检索 - 数组不可变 703. 数据流中的第 K 大元素 705. 设计哈希集合 706. 设计哈希映射 ...

  2. Django集成的密码找回功能

    要实现忘记密码功能,您需要进行以下修改: 添加忘记密码链接到登录页面. 创建密码丢失修改页面. 创建密码修改页面. 编写相应的视图函数来处理密码丢失修改和密码修改逻辑. 编写发送验证信息到邮箱的逻辑. ...

  3. 基于微信小程序+Springboot线上租房平台设计和实现【三端实现小程序+WEB响应式用户前端+后端管理】

    感兴趣的可以先收藏起来,大家在毕设选题,项目以及论文编写等相关问题都可以给我加好友咨询 一. 前言介绍: 近年来,我国的社会经济迅猛发展,社会对于房屋租赁的需求也在不断增多.在房屋租赁企业中面对繁琐而 ...

  4. LLM并行训练7-混合并行总结

    概述 根据前面的系列文章, 对预训练大模型里用到的主要并行加速技术做了一系列拆分分析. 但是在实际的训练里往往是多种并行混合训练. 我们要怎么配置这些并行策略才能让训练框架尽可能的减少通信瓶颈, 提升 ...

  5. 7、SpringMVC之RESTful概述

    创建名为spring_mvc_rest的新module,过程参考5.2节和6.6节 7.1.简介 RESTful 也称为REST(英文:Representational State Transfer) ...

  6. 【Java】暂存逻辑

    需求说明: 需求是填写一个表单时暂时保存输入项,不提交表单 回来再次填写时可以恢复或者放弃,或者更改内容继续暂存 放两张UI图,一个移动端,一个手机端: 逻辑分析: 存储方式有这么几种,Cookie存 ...

  7. 【CI/CD】Jenkins 部署前后端项目Demo

    前置环境准备: 参考尚硅谷最新发布的Jenkins教程 同样准备了三台服务器: 192.168.124.34 Centos7 8G内存 用于安装GitLab 192.168.124.35 Centos ...

  8. 【SpringMVC】05 RestFul风格

    什么是RestFul风格? 一个资源定位和资源操作的风格,不是标准,也不是协议, 基于此风格的路径访问可以隐藏真实的参数传递,以提高网站的安全访问 以往的请求参数: jdbc:mysql://loca ...

  9. B站上教虚幻引擎做游戏的博主 —— 谌嘉诚

    个人主页地址: https://space.bilibili.com/31898841/ 课程地址: https://www.bilibili.com/video/BV164411Y732/

  10. ubuntu 18.04系统下CPU实时频率查看工具 cpupower

    1.  cpupower  安装 sudo apt install linux-tools-common 2.   CPU实时频率查看 watch -n 1 sudo cpupower monitor ...