Nuxt3【路由中间件】middleware

embedded/2024/10/19 2:15:40/

路由中间件类似路由守卫,即在导航到特定路由之前运行一段代码

内联路由中间件

在页面中定义的路由中间件,因没有名称,所以也叫匿名路由中间件

definePageMeta({middleware: [function (to, from) {console.log("执行了内联路由中间件", to, from);},],
});

命名路由中间件

middleware 目录中定义,如 middleware/routerInfo.ts

export default defineNuxtRouteMiddleware((to, from) => {console.log("路由信息 from --", from);console.log("路由信息 to --", to);
});

在页面中使用

definePageMeta({middleware: ["router-info"],// 或 middleware: 'router-info'
});

路由中间件的名称会被规范化为 kebab-case 格式:myMiddleware 变成 my-middleware

全局路由中间件

每次路由更改时都运行

通过添加 .global 后缀实现,如 middleware/routerInfo.global.ts

路由中间件的返回值

照常路由

无返回值时,即按原计划完成路由导航

路由重定向

// 重定向到 /about
return navigateTo('/about')

重定向到给定的路径,并在服务器端发生重定向时设置重定向代码为 301

return navigateTo('/', { redirectCode: 301 })

中断路由

return abortNavigation()
// 中止路由时提供错误消息
return abortNavigation(error)

路由中间件的执行顺序

1. 全局路由中间件

默认按全局路由文件名的字符串顺序

在这里插入图片描述
middleware/my.global.ts 会先执行

若想让 middleware/routerInfo.global.ts 先执行,可在文件名前加数字前缀,如

在这里插入图片描述
注意事项:

在这里插入图片描述

虽然目录中 2.my.global.ts 在上面,但 10.routerInfo.global.ts 会先执行,因为是按文件名的字符串顺序执行,所以个位数需加前缀 0,即 01 ,02

2. 页面中定义的中间件

按数组的顺序

definePageMeta({middleware: [function (to, from) {// 自定义内联中间件},'demo2','demo1',],
});

即先执行匿名中间件,然后是 demo2,最后是 demo1

路由中间件的执行时机

默认情况下,因是服务器渲染,路由中间件在服务端渲染时会执行一次,在客户端渲染时,又会执行一次!

通过下方代码,可以精确自定义路由中间件的执行时机:

export default defineNuxtRouteMiddleware(to => {// 在服务器端跳过中间件if (process.server) return// 完全在客户端跳过中间件if (process.client) return// 或仅在初始客户端加载时跳过中间件const nuxtApp = useNuxtApp()if (process.client && nuxtApp.isHydrating && nuxtApp.payload.serverRendered) return
})

动态添加中间件

使用 addRouteMiddleware() 辅助函数手动添加全局或命名的路由中间件,比如在插件中添加。

export default defineNuxtPlugin(() => {addRouteMiddleware('global-test', () => {console.log('这个全局中间件是在插件中添加的,将在每次路由更改时运行')}, { global: true })addRouteMiddleware('named-test', () => {console.log('这个命名中间件是在插件中添加的,将覆盖同名的任何现有中间件')})
})

http://www.ppmy.cn/embedded/96184.html

相关文章

使用SQL统计某个表每天的总量和增量

参考: 使用SQL统计某个表每天的总量和增量 https://blog.csdn.net/weixin_34060299/article/details/92286916/ https://blog.csdn.net/bisal/article/details/125437314 例子:一个user表 有user_id自增主键,还有create_time用户创建时间 …

数据库根据日期统计SQL编写记录

统计每天产生多少数据 SELECT to_char("日期字段",YYYY-MM-dd) time ,count(*) FROM "表名" GROUP BY time;统计每月产生多少数据 SELECT to_char("日期字段",YYYY-MM) time ,count(*) FROM "表名" GROUP BY time;统计每年产生多少数…

Ubuntu卸载NGINX

Ubuntu卸载NGINX 在Ubuntu上卸载NGINX,你可以使用以下步骤来完成: 停止NGINX服务(如果它正在运行): sudo systemctl stop nginx禁用NGINX服务(如果你不希望它在系统启动时自动启动)&#xff1a…

【区块链+金融服务】甘肃股权交易中心企业金融服务平台 | FISCO BCOS应用案例

甘肃股权交易中心股份有限公司(简称“甘肃股交中心”)与甘肃征信股份有限公司同属甘肃金控集团控股子公司, 在共同服务本地中小微企业发展中发挥了重要作用。甘肃股交中心目前使用深圳证券通信有限公司研发的区域股权综合金融服务平台&#x…

stable-diffusion-xl-refiner-1.0

1.前言 这是一个基于Latent Diffusion的生成模型。它的主要功能是对通过SDXL 1.0 base模型生成的初始图像进行进一步的细化和去噪处理,以提升图像的质量和细节表现。这里的“refiner”模型是专门设计用来在最后的降噪步骤中改进图像的。 2.与SDXL 1.0 base模型的区别…

在Linux上搭建的Samba服务器无法写入文件

在Linux上搭建的Samba服务器无法写入文件,这通常是由于权限问题、Samba配置不当或其他网络问题引起的。以下是一些可能的解决方案,您可以按照这些步骤进行排查: 检查Samba配置文件: 打开Samba配置文件,通常是/etc/sam…

Web开发:C# MVC + Session机制实现授权免登录demo

token基础demo 【需求】 Home/Index 登录界面,校验成功后可以登录到Main/Index ,用户登录3分钟内关闭网站,再次访问Home/Index时可以免密登录Main/Index 【配置文件-Program.cs】 var builder WebApplication.CreateBuilder(args);// Add services t…

网络安全自学入门:(超详细)从入门到精通学习路线规划,学完即可就业

很多人上来就说想学习黑客,但是连方向都没搞清楚就开始学习,最终也只是会无疾而终!黑客是一个大的概念,里面包含了许多方向,不同的方向需要学习的内容也不一样。 算上从学校开始学习,已经在网安这条路上走…