【Nutx3】middleware目录介绍

简言

记录下nuxt3middleware目录的使用方法。

middleware

middleware是存放路由中间件的文件目录。
路由中间件有三种:

  1. 匿名(或内联)路由中间件直接在页面中定义。
  2. 已命名的路由中间件,放在 middleware/ 中,页面使用时通过异步导入自动加载(definePageMeta中的middleware)。
  3. 全局路由中间件:置于中间件/中,后缀为.global,每次更改路由时都会运行。

中间件名称已规范化为 kebab-case。
路由中间件在 Nuxt 应用程序的 Vue 部分中运行。

使用

路由中间件是导航卫士,接收当前路由和下一条路由作为参数。

export default defineNuxtRouteMiddleware((to, from) => {
  if (to.params.id === '1') {
    return abortNavigation()
  }
  // In a real app you would probably not redirect every route to `/`
  // however it is important to check `to.path` before redirecting or you
  // might get an infinite redirect loop
  if (to.path !== '/') {
    return navigateTo('/')
  }
})

Nuxt 提供了两个全局可用的助手,可以直接从中间件返回。

  • navigateTo - 重定向到给定路径
  • abortNavigation(error?) - 终止导航,可选择错误信息(error)。

nuxt3的路由返回值规则如下:

  • nothing (简单返回或根本不返回)- 不会阻止导航,并将移动到下一个中间件函数(如果有的话)或完成路由导航。
  • return navigateTo(‘/’) - 重定向到指定路径,如果重定向发生在服务器端,重定向代码将设置为 302 Found。
  • return navigateTo(‘/’, { redirectCode: 301 }) - 重定向到指定路径,如果重定向发生在服务器端,重定向代码将设置为 301 Moved Permanently(永久移动)。
  • return abortNavigation() - 停止当前导航
  • return abortNavigation(error) - 出错时拒绝当前导航

中间件执行顺序

中间件按以下顺序运行:

  1. 全局中间件
  2. 页面定义的中间件顺序(如果使用数组语法声明了多个中间件)

例如,假设您有以下中间件和组件:

middleware/
--| analytics.global.ts
--| setup.global.ts
--| auth.ts

<script setup lang="ts">
definePageMeta({
  middleware: [
    function (to, from) {
      // Custom inline middleware
    },
    'auth',
  ],
});
</script>

中间件的运行顺序如下:

  1. analytics.global.ts
  2. setup.global.ts
  3. 自定义的内联中间件函数.
  4. auth.ts

默认情况下,全局中间件根据文件名的字母顺序执行,你可以在文件前面填加数字,以调整运行顺序。

运行时机

如果您的网站是服务器渲染或生成的,那么初始页面的中间件将在页面渲染时执行,然后在客户端再次执行。

如果需要在不同运行时机执行特定代码,则需要process.server或process.client判断:

export default defineNuxtRouteMiddleware((to, from) => {
  console.log('中间件auth');

  if (process.server) {
    console.log('server 运行时机');
  }
  if (process.client) {
    console.log('client 运行时机');
  }
  const nuxtApp = useNuxtApp();

  if (process.client && nuxtApp.isHydrating && nuxtApp.payload.serverRendered) {
    console.log('仅在客户端首次加载时跳过中间件');
  }
});

动态添加中间件

可以使用 addRouteMiddleware() 辅助函数手动添加全局或命名路由中间件,例如从插件中添加。

export default defineNuxtPlugin(() => {
  addRouteMiddleware('global-test', () => {
    console.log('this global middleware was added in a plugin and will be run on every route change')
  }, { global: true })

  addRouteMiddleware('named-test', () => {
    console.log('this named middleware was added in a plugin and would override any existing middleware of the same name')
  })
})

在构建时设置中间件

你可以在 pages:extend 钩子中按条件批量添加命名路由中间件,而不是在每个页面上使用 definePageMeta。

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)
    }
  }
})

结语

普通的已命名的路由中间件必须在页面的script中注册以下才可以使用:

 definePageMeta({
    middleware: ['auth'],
  });

若出现这样的提示,definePageMeta() is a compiler-hint helper that is only usable inside the script block of a single file component which is also a page. Its arguments should be compiled away and passing it at runtime has no effect.:
在这里插入图片描述
说明你的definePageMeta没放对位置,需要放在页面路由生效呈现的vue页面组件的script中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/466896.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

4.1_4 文件的物理结构

文章目录 4.1_4 文件的物理结构&#xff08;一&#xff09;文件块、磁盘块&#xff08;二&#xff09;文件分配方式——连续分配&#xff08;三&#xff09;文件分配方式——链接分配&#xff08;1&#xff09;链接分配——隐式链接&#xff08;2&#xff09;链接分配——显式链…

慢sql优化

1.避免使用select *&#xff0c;而是明确列出需要的列&#xff0c; 2.小表驱动大表&#xff0c;in适用于左边大表&#xff0c;右边小表。 exists适用于左边小表&#xff0c;右边大表。 3.批量操作&#xff1a;如果每次插入数据库数据&#xff0c;都要连接一次数据库&#xf…

若依 ruoyi-cloud [网关异常处理]请求路径:/system/user/getInfo,异常信息:404

这里遇到的情况是因为nacos中的配置文件与项目启动时的编码不一样&#xff0c;若配置文件中有中文注释&#xff0c;那么用idea启动项目的时候&#xff0c;在参数中加上 -Dfile.encodingutf-8 &#xff0c;保持编码一致&#xff0c;&#xff08;用中文注释的配置文件&#xff0c…

杂货铺 | vscode配置C/C++环境(亲测极简ver)

文章目录 &#x1f4da;Step1&#xff1a;下载安装VSCode&#x1f4da;Step2&#xff1a;下载安装g&#x1f4da;Step3&#xff1a;编辑环境变量&#x1f4da;Step4&#xff1a;安装vscode插件&#x1f4da;Step5&#xff1a;建好文件夹⭐️&#x1f4da;Step6&#xff1a;开始…

linux(Ubuntu22) 一篇带你学会Linux,详细篇

Linux 简介 精通Linux&#xff0c;自带python&#xff0c;系统开源 电脑可安装双系统 c盘安装win D盘安装linux 在一套硬件上只能同时运行一个操作系统 虚拟机 模拟真实环境 在虚拟机内运行操作系统 需要硬件支持虚拟化 开启VT-X VM…

深度剖析:数字经济下人工智能水平的新测算模型数据集

数据来源&#xff1a;企业年报时间跨度&#xff1a;1991-2022年数据范围&#xff1a;各企业数据指标&#xff1a; 年份 股票代码 公司名称 总词频 词频加1取对数 人工智能 计算机视觉 图像识别 知识图谱 智能教育 增强现实 智能政务 特征提…

【小迪安全】学习cho1

介绍了一些名词&#xff1a; POC、EXP、Payload与Shellcode nc -lvvp 端口号 监听服务器端口 个人用机使用最多的是&#xff1a;windows10 服务器用机使用最多的是&#xff1a;Windows8&#xff0c;12&#xff0c;16 流量被防火墙拦截了&#xff0c;到这里进行给与权限 文件…

资深HR是如何做人力资源管理的?企业人力资源该如何分析?

人力资源管理旨在通过招聘、甄选、培训、薪酬、绩效、职业规划等多方面的有效手段&#xff0c;科学合理地管理企业的人力资源&#xff0c;以满足当前及未来的发展需求&#xff0c;并确保实现企业既定目标。在人才竞争激烈的时代&#xff0c;许多初涉人力资源领域的从业者都对人…

python 深度学习 记录遇到的报错问题12

本篇继python 深度学习 记录遇到的报错问题11_undefined symbol: __nvjitlinkadddata_12_1, version-CSDN博客 目录 一、AttributeError: module ‘tensorflow‘ has no attribute ‘app‘ 二、AttributeError: module tensorflow has no attribute placeholder 三、Attribu…

html密码访问单页自定义跳转页面源码

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 密码访问单页自定义跳转页面&#xff0c;修改了的密码访问单页&#xff0c;添加了js自定义密码跳转页面。需要正确输入密码才能跳转目标网址。 二、效果展示 1.部分代码 代码如下&…

9. 编程常见错误归类

编程常见错误归类 9.1 编译型错误9.2 链接型错误9.3 运行时错误 9.1 编译型错误 编译型错误⼀般都是语法错误&#xff0c;这类错误⼀般看错误信息就能找到⼀些蛛丝马迹的&#xff0c;双击错误信息也能初步的跳转到代码错误的地方或者附近。编译错误&#xff0c;随着语言的熟练…

2024蓝桥杯每日一题(DFS)

备战2024年蓝桥杯 -- 每日一题 Python大学A组 试题一&#xff1a;奶牛选美 试题二&#xff1a;树的重心 试题三&#xff1a;大臣的差旅费 试题四&#xff1a;扫雷 试题一&#xff1a;奶牛选美 【题目描述】 听说最近两斑点的奶牛最受欢迎&#xff0c;…

【云呐】固定资产管理系统的功能有哪些?管理工具

为了提高经营效率&#xff0c;降低企业成本&#xff0c;许多企业选择固定资产管理系统。那么&#xff0c;固定资产管理系统有什么作用呢&#xff1f; 资产登记&#xff1a;  固定资产管理系统可以方便地登记公司的固定资产&#xff0c;包括资产名称、规格型号、购买日期、使…

18个惊艳的可视化大屏(第26辑):航空与运输业

hello&#xff0c;我是贝格前端工场老司机&#xff0c;这是第26期了&#xff0c;本次带来可视化大屏在航空与运输业的应用案例&#xff0c;喜欢文章的别忘点赞关注&#xff0c;文章底部也有其他行业的案例。 可视化大屏在航空与运输业中具有以下九大价值&#xff1a; 实时监控…

新火种AI|英伟达GTC大会在即,它能否撑住场面,为AI缔造下一个高度?

作者&#xff1a;小岩 编辑&#xff1a;彩云 英伟达不完全属于AI行业&#xff0c;但神奇的是&#xff0c;整个AI领域都有着英伟达的传说。因为几乎所有的AI巨头都需要英伟达的芯片来提供算力支持。 也正因此&#xff0c;纵使AI赛道人来人往&#xff0c;此起彼伏&#xff0c;…

Netty中的核心概念

事件传播机制 当pipeline中有多个handler时&#xff0c;netty内部的事件是如何向后传递到每个handler中的&#xff1f; 结论&#xff1a;需要在当前handler中手动将当前事件传递下去 1&#xff0c;如果handler是直接实现的接口&#xff0c;使用ChannelHandlerContext的fireXXX…

针对BSV区块链新推出的网络访问规则NAR和警报系统AS的解释与问答

​​发表时间&#xff1a;2024年2月22日 BSV区块链社区团队最近开设了一个Twitter&#xff08;X&#xff09;话题空间&#xff0c;讨论BSV区块链协会最新推出的网络访问规则和警报系统的相关问题。 本次讨论由BSV区块链社区负责人Brett Banfe主持&#xff0c;以便社区成员更好…

【开源】SpringBoot框架开发毕业生追踪系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 登陆注册模块2.2 学生基本配置模块2.3 就业状况模块2.4 学历深造模块2.5 信息汇总分析模块2.6 校友论坛模块 三、系统设计3.1 用例设计3.2 实体设计 四、系统展示五、核心代码5.1 查询我的就业状况5.2 初始化就业状况5.…

正则表达式总结-满满干货拿走不谢

&#x1f341;博主简介&#xff1a; &#x1f3c5;云计算领域优质创作者 &#x1f3c5;2022年CSDN新星计划python赛道第一名 &#x1f3c5;2022年CSDN原力计划优质作者 &#x1f3c5;阿里云ACE认证高级工程师 &#x1f3c5;阿里云开发者社区专…

elasticsearch基础学习

elasticsearch简介 什么是elasticsearch elasticsearch&#xff08;简称es&#xff09;&#xff0c;其核心是 Elastic Stack&#xff0c;es是一个基于 Apache Lucene&#xff08;TM&#xff09;的开源的高扩展的分布式全文检索引擎&#xff0c;它可以近乎实时的存储、检索数据…