Springboot项目搭建(6)-前端登录跳转与Pinia实用

1.添加响应错误拦截

文件地址:src\utils\request.js

import axios from 'axios'
import { ElMessage } from 'element-plus'
const baseURL = '/api'
const instance = axios.create({baseURL})
//添加拦截器
instance.interceptors.response.use(result=>{👇//判断响应协议码if(result.data.code===0){return result.data;          }//响应数据错误ElMessage.error(result.data.msg?result.data.msg:"服务异常")return Promise.reject(result.data)//向上抛出异常,异步状态转换为失败},      👆err=>{alert('服务异常')return Promise.reject(err)}
)
export default instance;

2.前端登录界面

2.1 登录接口

文件地址:src\apis\user.js

export暴露:在外部调用函数

export const userLoginService = (LoginData) =>{const params = new URLSearchParams()for(let key in LoginData){params.append(key,LoginData[key])}return request.post('/user/login',params)
}

2.2 登录函数

文件地址:src\views\Login.vue

<script setup>
import...
const login =async()=>{let result= await userLoginService(registerData.value);console.log(result)ElMessage.success(result.msg?result.msg:'登录成功')
}
</script>

2.3 创建登录按钮单击事件

<el-button type="primary" class="button" @click="login">登录</el-button>

3.登录成功路由跳转 

3.1 创建Layout界面

文件地址:src\views\Layout.vue

<template>Layout
</template>

3.2 设计Layout地址

文件地址:src\router\index.js

import { createRouter, createWebHistory } from 'vue-router'
import Login from '@/views/Login.vue'
import Layout from '@/views/Layout.vue'
const router = createRouter({history: createWebHistory(import.meta.env.BASE_URL),routes: [{path: '/',name: 'layout',component: Layout},{path: '/login',name: 'login',component: Login}],
})
export default router

3.3 其他设计路由的地址

src\main.js

src\App.vue

3.4 设计登录成功路由跳转 

文件地址:src\views\Login.vue

<script setup>
import...
import { useRouter } from 'vue-router';//获得路由跳转对象
const router = useRouter()//跳转对象实例化
const login =async()=>{let result= await userLoginService(registerData.value);// console.log(result)ElMessage.success(result.msg?result.msg:'登录成功')//跳转至主页router.push("/")
}
</script>

4.Pinia状态管理

Pinia 是 Vue 的存储库,它允许您跨组件/页面共享状态。

官网网址:Home | Pinia 中文文档

 4.1 安装

npm install pinia
npm install pinia-persistedstate-plugin

4.2 挂载

在入口文件src\main.js

import './assets/main.css'import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import { createPinia } from 'pinia'👈
import { createPersistedState } from 'pinia-persistedstate-plugin'👈const app = createApp(App)
//工具实例化
const persist = createPersistedState()👈
const pinia = createPinia()👈
pinia.use(persist)👈
app.use(pinia)👈
app.use(router)
app.use(ElementPlus)
app.mount('#app')

4.3 定义Store

使用 Pinia 进行状态管理的示例,它定义了一个名为 token 的状态管理集。

它用于管理一个名为 token 的响应式变量,这个变量通常用于存储用户的认证令牌。

定义Store:defineStore函数中有三个参数,分别为:

  • 参数1:状态管理集的名字【唯一性】
  • 参数2:函数,用于定义状态数据的所有内容
  • 参数3:函数,其他配置
import { defineStore } from "pinia";
import { ref } from "vue";
export const useTokenStore = defineStore('token',()=>{//定义状态数据//1.响应式变量const token = ref('')//2.定义函数,修改token值const setToken = (newToken)=>{token.value = newToken}//3.移除token的值const removeToken = ()=>{token.value=''}return {token,setToken,removeToken}
},{persist:true//数据持久化存储
})

4.4 在组件中应用

文件地址:src\views\Login.vue

<script setup>
import...
import { useRouter } from 'vue-router';//获得路由跳转对象
import { useTokenStore } from '@/stores/token';
const tokenStore = useTokenStore()👈
const router = useRouter()//跳转对象实例化
const login =async()=>{let result= await userLoginService(registerData.value);// console.log(result)ElMessage.success(result.msg?result.msg:'登录成功')//将用户的token数据存储到pinia中tokenStore.setToken(result.data)👈//跳转至主页router.push("/")
}
</script>

4.5 配置请求携带token

当你使用这个 Axios 实例发送 HTTP 请求时,

如果 tokenStore 中存在 token,这个 token 会自动被添加到请求的 Authorization 头中。

这意味着每个请求都会自动携带认证信息,无需在每个请求中手动添加。

//添加请求拦截器
import { useTokenStore } from '@/stores/token'
instance.interceptors.request.use((config)=>{//请求前的回调//添加tokenconst tokenStore = useTokenStore();//判断有没有tokenif(tokenStore.token){config.headers.Authorization = tokenStore.token}return config;},(err)=>{//请求错误的回调Promise.reject(err)}
)

4.6 效果视图

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

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

相关文章

多输入多输出 | Matlab实现TCN-LSTM时间卷积神经网络结合长短期记忆神经网络多输入多输出预测

多输入多输出 | Matlab实现TCN-LSTM时间卷积神经网络结合长短期记忆神经网络多输入多输出预测 目录 多输入多输出 | Matlab实现TCN-LSTM时间卷积神经网络结合长短期记忆神经网络多输入多输出预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 多输入多输出 | Matlab实现…

C++网络编程:select IO多路复用及TCP服务器开发

C网络编程&#xff1a;使用select实现IO多路复用 一、什么是 IO 多路复用&#xff1f;二、IO多路复用器 select三、相关接口3.1、fd_set 结构体3.2、宏和函数 四、select 实现 TCP 服务器五、总结 一、什么是 IO 多路复用&#xff1f; 在网络编程中&#xff0c;最容易想到的并…

HDU Go Running(最小点覆盖 + 网络流优化)

题目大意&#xff1a;有一条无限长跑道&#xff0c;每个人可以规定自己跑步的方向&#xff0c;起点&#xff0c;跑步起止时间。每个人跑步的速度都是1m/s。最后从监控人员哪里得到了n个报告&#xff0c;每个报告给出了某人在某一时候所在的位置&#xff0c;问跑步的最少可能人数…

28.UE5实现对话系统

目录 1.对话结构的设计&#xff08;重点&#xff09; 2.NPC对话接口的实现 2.1创建类型为pawn的蓝图 2.2创建对话接口 3.对话组件的创建 4.对话的UI设计 4.1UI_对话内容 4.2UI_对话选项 4.3UI_对话选项框 5.对话组件的逻辑实现 通过组件蓝图&#xff0c;也就是下图中的…

Reachy 2,专为AI与机器人实验室打造的卓越开源双臂移动操作平台!

近期&#xff0c;花粉机器人&#xff08;POLLEN ROBOTICS&#xff09;隆重推出Reachy 2仿生机器人——下一代开源操作平台&#xff0c;为AI与机器人实验室带来理想的双臂移动操作科研平台&#xff01; Reachy 2的仿生性&#xff1a; 》拥有两个基于Maxon无刷电机的仿生7自由度…

python的openpyxl库设置表格样式:字体/边框/对齐/颜色等

学习目录 1. 安装和使用openpyxl库设置表格样式 2 设置字体font 3 设置边框 4 设置对齐方式 5 设置单元格数据格式 6 设置行高和列宽 7 填充单元格颜色 附录-关于颜色说明 本章节主要介绍如何使用openpyxl库设置表格中的一些样式&#xff0c;比如字体&#xff0c;边框…

Git旧文件覆盖引发思考

一天&#xff0c;我的同事过来找到我&#xff0c;和我讲&#xff1a;张叫兽&#xff0c;大事不好&#xff0c;我的文件被人覆盖了。git是真的不好用啊 git不好用&#xff1f;文件被覆盖&#xff1b;瞬间我似乎知道了什么&#xff0c;让我想到了某位男明星的语法&#xff1a;他…

QSqlTableModel的使用

实例功能 这边使用一个实例显示数据库 demodb 中 employee 数据表的内容&#xff0c;实现编辑、插入、删除的操作&#xff0c;实现数据的排序和记录过滤&#xff0c;还实现 BLOB 类型字段 Photo 中存储照片的显示、导入等操作&#xff0c;运行界面如下图&#xff1a; 在上图中…

什么是代理,nodenginx前端代理详解

一. 什么是代理&#xff1f; 代理就是通过一个特殊的网络服务去访问另一网络服务的一种间接访问方式。像我们不能直接访问国外的网站&#xff0c;只能使用VPN&#xff0c;就是使用了代理 二. 前端为什么要用代理&#xff1f; 首先明确以下两个概念 &#xff08;1&#xff09…

java脚手架系列16-AI大模型集成

之所以想写这一系列&#xff0c;是因为之前工作过程中有几次项目是从零开始搭建的&#xff0c;而且项目涉及的内容还不少。在这过程中&#xff0c;遇到了很多棘手的非业务问题&#xff0c;在不断实践过程中慢慢积累出一些基本的实践经验&#xff0c;认为这些与业务无关的基本的…

网络安全中的数据科学如何重新定义安全实践?

组织每天处理大量数据&#xff0c;这些数据由各个团队和部门管理。这使得全面了解潜在威胁变得非常困难&#xff0c;常常导致疏忽。以前&#xff0c;公司依靠 FUD 方法&#xff08;恐惧、不确定性和怀疑&#xff09;来识别潜在攻击。然而&#xff0c;将数据科学集成到网络安全中…

【算法day1】数组:双指针算法

题目引用 这里以 1、LeetCode704.二分查找 2、LeetCode27.移除元素 3、LeetCode977.有序数组的平方 这三道题举例来说明数组中双指针的妙用。 1、二分查找 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜…

open-instruct框架使用记录:只使用huggingface数据集的小部分进行训练,如何修改dataset_info.json文件

open-instruct框架 这篇笔记主要记录以下问题&#xff1a;只使用huggingface下载的数据集中的一小部分数据进行数据训练。而且我不想修改open-instruct的加载数据集的代码&#xff0c;以及脚本中的--dataset_mixer_list参数的指定等。下面是我的思路历程。 if args.dataset_na…

Jenkins升级到最新版本后无法启动

1. 场景还原 最近在web界面将jenkins升级到最新版本后&#xff0c;后台无法启动jenkins服务&#xff0c;服务状态如下&#xff1a; 运行jenkins命令提示invalid Java version jenkins --version jenkins: invalid Java version: java version "1.8.0_202" Java(TM)…

DRM(数字权限管理技术)防截屏录屏----ffmpeg安装

提示&#xff1a;ffmpeg安装 文章目录 [TOC](文章目录) 前言一、下载二、配置环境变量三、运行ffmpeg四、文档总结 前言 FFmpeg是一套可以用来记录、转换数字音频、视频&#xff0c;并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的…

Unity版本使用情况统计(更新至2024年11月)

UWA发布&#xff5c;本期UWA发布的内容是第十五期Unity版本使用统计&#xff0c;统计周期为2024年5月至2024年11月&#xff0c;数据来源于UWA网站&#xff08;www.uwa4d.com&#xff09;性能诊断提测的项目。希望给Unity开发者提供相关的行业趋势作为参考。 2024年5月 - 2024年…

Spring Aop 中对JoinPoint的理解

以下是源码中对 JoinPoint 的描述 A runtime joinpoint is an event that occurs on a static joinpoint (i.e. a location in a program). For instance, an invocation is the runtime joinpoint on a method (static joinpoint). The static part of a given joinpoint can…

C中指针在64位操作系统下为什么是4而不是8

好久没写C了&#xff0c;今天用VScode想写个Demo&#xff0c;翻了下指针资料&#xff0c;想打印下指针大小&#xff0c;发现是4&#xff0c;但是理论上64位系统不应该是8么&#xff1f; 结论就是我编的是32位程序&#xff0c;编译器按照32位编译的。 用vscode的C 插件编译运行…

使用 pycharm 新建不使用 python 虚拟环境( venv、conda )的工程

有时候我们发现一个好玩的 demo&#xff0c;想赶快在电脑上 pip install 一下跑起来&#xff0c;发现因为 python 的 venv、conda 环境还挺费劲的&#xff0c;因为随着时间的发展&#xff0c;之前记得很清楚的 venv、conda 的用法&#xff0c;不经常使用&#xff0c;半天跑不起…

鸿蒙主流路由详解

鸿蒙主流路由详解 Navigation Navigation更适合于一次开发,多端部署,也是官方主流推荐的一种路由控制方式,但是,使用起来入侵耦合度高,所以,一般会使用HMRouter,这也是官方主流推荐的路由 Navigation官网地址 个人源码地址 路由跳转 第一步-定义路由栈 Provide(PageInfo) pag…