使用 defineNuxtRouteMiddleware 创建路由中间件

news/2024/11/16 19:50:12/文章来源:https://www.cnblogs.com/Amd794/p/18351993

title: 使用 defineNuxtRouteMiddleware 创建路由中间件
date: 2024/8/10
updated: 2024/8/10
author: cmdragon

excerpt:
本篇文章介绍了如何使用 defineNuxtRouteMiddleware 创建和应用路由中间件。通过示例演示了如何处理错误页面和身份验证逻辑。随着对 Nuxt.js 中间件的理解,你可以更灵活地控制应用的路由行为,从而提升用户体验。

categories:

  • 前端开发

tags:

  • Nuxt3
  • 路由
  • 中间件
  • 错误处理
  • 认证
  • 重定向
  • 定制逻辑

image
image

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

使用 defineNuxtRouteMiddleware 创建路由中间件

在 Nuxt.js 中,路由中间件是一种强大的机制,可以在路由进入之前处理特定的逻辑。例如,你可以根据用户的身份验证状态来重定向用户,或者在某些条件不满足时显示错误页面。

什么是路由中间件?

路由中间件是一个函数,它在路由变化之前执行,允许我们在访问特定页面时添加逻辑。它可以帮助你进行身份验证、授权检查、日志记录等。

路由中间件的结构

路由中间件的基本结构如下所示:

const middleware = (to, from) => {// 处理逻辑
};export default defineNuxtRouteMiddleware(middleware);
  • to:下一个路由的位置对象。
  • from:当前路由的位置对象。

创建和使用路由中间件

1. 显示错误页面的中间件

我们首先创建一个中间件,用于检测特定条件并显示错误页面。如果参数 id 存在且为 1,我们将抛出一个404错误。

创建 middleware/error.ts


export default defineNuxtRouteMiddleware((to) => {if (to.params.id === '1') {throw createError({ statusCode: 404, statusMessage: '页面未找到' });}
});

在这个例子中,如果用户访问的路由包含参数 id 且其值为 1,则抛出一个404的错误,Nuxt会自动重定向到定义的错误页面。

2. 基于身份验证状态的重定向

接下来,我们创建一个中间件,用于检查用户是否已经经过身份验证。如果没有验证,用户将被重定向到登录页面。

创建 middleware/auth.ts


export default defineNuxtRouteMiddleware((to, from) => {const auth = useState('auth');// 检查用户是否登录if (!auth.value.isAuthenticated) {return navigateTo('/login'); // 重定向到登录页面}// 如果用户不在仪表盘页面,则重定向到仪表盘if (to.path !== '/dashboard') {return navigateTo('/dashboard');}
});

在上面的代码中,我们使用 useState 获取用户的身份验证状态。如果用户没有登录,我们使用 navigateTo 进行重定向,导向 /login 页面。如果用户不在仪表盘页面,我们也将其重定向到仪表盘。

中间件的注册

在创建好中间件后,Nuxt 会自动识别在 middleware/ 目录下的中间件文件。你可以通过在页面组件中指定中间件来使用它们。例如,在一个页面组件中使用上面的中间件:

在页面中使用中间件

<template><div><h1>欢迎来到仪表盘</h1></div>
</template><script>
definePageMeta({middleware: ["auth"]// 或 middleware: 'auth'
})
</script>

全局使用中间件

如果您希望让每个路由都使用某个中间件,可以在 nuxt.config.ts 文件中注册全局中间件

总结

路由中间件在管理用户访问权限和错误处理方面非常有用。通过 defineNuxtRouteMiddleware,您可以轻松地定义中间件,控制用户如何在 Nuxt 应用程序中流动。

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

往期文章归档:

  • 使用 defineNuxtComponent`定义 Vue 组件 | cmdragon's Blog
  • 使用 createError 创建错误对象的详细指南 | cmdragon's Blog
  • 清除 Nuxt 状态缓存:clearNuxtState | cmdragon's Blog
  • 清除 Nuxt 数据缓存:clearNuxtData | cmdragon's Blog
  • 使用 clearError 清除已处理的错误 | cmdragon's Blog
  • 使用 addRouteMiddleware 动态添加中间 | cmdragon's Blog
  • 使用 abortNavigation 阻止导航 | cmdragon's Blog
  • 使用 $fetch 进行 HTTP 请求 | cmdragon's Blog
  • 使用 useState 管理响应式状态 | cmdragon's Blog
  • 使用 useServerSeoMeta 优化您的网站 SEO | cmdragon's Blog
  • 使用 useSeoMeta 进行 SEO 配置 | cmdragon's Blog
  • Nuxt.js必读:轻松掌握运行时配置与 useRuntimeConfig | cmdragon's Blog
  • Nuxt.js 路由管理:useRouter 方法与路由中间件应用 | cmdragon's Blog
  • useRoute 函数的详细介绍与使用示例 | cmdragon's Blog
  • 使用 useRequestURL 组合函数访问请求URL | cmdragon's Blog
  • Nuxt.js 环境变量配置与使用 | cmdragon's Blog
  • 服务端渲染中的数据获取:结合 useRequestHeaders 与 useFetch | cmdragon's Blog
  • 使用 useRequestEvent Hook 访问请求事件 | cmdragon's Blog
  • 使用 useNuxtData 进行高效的数据获取与管理 | cmdragon's Blog

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring AI 更新:支持OpenAI的结构化输出,增强对JSON响应的支持

就在昨晚,Spring AI发了个比较重要的更新。由于最近OpenAI推出了结构化输出的功能,可确保 AI 生成的响应严格遵守预定义的 JSON 模式。此功能显着提高了人工智能生成内容在现实应用中的可靠性和可用性。Spring AI 紧随其后,现在也可以对OpenAI的结构化输出完美支持了。 下图…

CryptoHouse:由 ClickHouse 和 Goldsky 支持的免费区块链分析服务(ClickHouse 博客)

我们很高兴地宣布 CryptoHouse,在 crypto.clickhouse.com 上可访问,这是一个由 ClickHouse 提供支持的免费区块链分析服务。https://crypto.clickhouse.com/现有的公共区块链分析服务通常需要定时、异步查询,而 ClickHouse 提供实时分析,通过即时查询响应来普及访问权限。用…

chatgpt这么火,现在AI搜索引擎有哪些呢?

常用国外的AI搜索引擎:ChatGPT (OpenAI):一个基于自然语言处理的AI助手,能够回答问题、生成文本内容并执行多种语言任务。 Google Bard:Google的AI驱动搜索引擎,集成了自然语言处理技术,旨在提供更加智能和个性化的搜索体验。 Microsoft Bing (AI-Powered):微软将OpenAI…

[python] Python并行计算库Joblib使用指北

Joblib是用于高效并行计算的Python开源库,其提供了简单易用的内存映射和并行计算的工具,以将任务分发到多个工作进程中。Joblib库特别适合用于需要进行重复计算或大规模数据处理的任务。Joblib库的官方仓库见:joblib,官方文档见:joblib-doc。 Jolib库安装代码如下:pip in…

【数据结构】【模板】哈夫曼树

哈夫曼树 定义 带权路径长度:结点的权值乘以结点到跟的距离。 树上所有结点带权路径长度之和最小的二叉树称为哈夫曼树。 性质哈夫曼是满二叉树。 来自维基百科:原序列构成哈夫曼树的所有叶子结点。 离根结点越近,点权越大。 非叶子结点的点权之和就是所有叶子结点的带权路径…

线性筛法

接到主的任务,要求找出来 \([1, n]\) 中的质数。 并被告知 \(n = 10\)。 考虑 \(1\)。 \(1\) 是不是质数 \(1\) 是不是质数 \(1\) 是不是质数 \(1\) 是不是质数 \(1\) 是不是质数 \(1\) 是不是质数 \(1\) 是不是质数 \(1\) 是不是质数 \(1\) 是不是质数 \(1\) 是不是质数 \(1\…

解决uwsgi -ini uwsgi.ini 重启服务无效果

更新了前端代码,重启服务无效果 具体log日志 your processes number limit is 95696 your memory page size is 4096 bytes *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers ***detected max f…

「代码随想录算法训练营」第三十四天 | 动态规划 part7

198. 打家劫舍题目链接:https://leetcode.cn/problems/house-robber/ 文章讲解:https://programmercarl.com/0198.打家劫舍.html 题目难度:中等 视频讲解:https://www.bilibili.com/video/BV1Te411N7SX 题目状态:有点思路但不全。思路: 这次的dp[i]数组表示在到第i个房间…

洛谷 P2731 骑马修栅栏 Riding the Fences之欧拉路径板子

洛谷P2731题解传送锚点摸鱼环节 [USACO3.3] 骑马修栅栏 Riding the Fences 题目背景 Farmer John 每年有很多栅栏要修理。他总是骑着马穿过每一个栅栏并修复它破损的地方。 题目描述 John 是一个与其他农民一样懒的人。他讨厌骑马,因此从来不两次经过一个栅栏。 John 的农场上…

运用Npcap库实现SYN半开放扫描

Npcap 是一款高性能的网络捕获和数据包分析库,作为 Nmap 项目的一部分,Npcap 可用于捕获、发送和分析网络数据包。本章将介绍如何使用 Npcap 库来实现半开放扫描功能。TCP SYN 半开放扫描是一种常见且广泛使用的端口扫描技术,用于探测目标主机端口的开放状态。由于这种方法并…