当前位置: 首页 > news >正文

第47章 后端管理首页与Axios拦截守卫原理

1 404全局拦截

1.1 定义布局页:src\views\ 404View.vue

<template>

    <el-container>

        <el-main>

        </el-main>

        <el-footer>

            <h1>大人,你要找的页面离家出走了!小的正在努力寻找中</h1>

        </el-footer>

    </el-container>

</template>

<script>

</script>

<style scoped lang="scss">

    .el-container {

        margin: 0px;

        position: absolute;

        left: 0;

        top: 0;

        right: 0;

        bottom: 0;

        background: url(../assets/404.png) no-repeat top left;

        background-repeat: no-repeat;

        background-size: cover;

        width: 100%;

        height: 100%;

    }

    .el-main {

        height: 75vh; //必须定义:"height"为:75vh,否则主区域的高度不能达到100%;如果大于75vh整页的调度将超过100%

    }

    .el-footer {

        color: #FFFFFF;

        height: 25vh; //必须定义:"height"为:25vh,否则主区域的高度不能达到100%;如果大于25vh整页的调度将超过100%

    }

</style>

1.2 重构路由:src\router\index.js

const routes = [{

        path: '/:catch(.*)',

        name: '404',

        component: () => import('../views/404View.vue')

    },

    {

        path: '/Login',

        name: '登录',

        component: () => import('../views/LoginView.vue')

    },

    在Vue3中不需定义任何的拦截守卫方法,只要完成上述定义即可实现404全局拦截,在程序执行后在地址栏中输入任何1个当前项目中不存在的页面就会自动跳转到404页面。

2 端管理首页与Axios拦截守卫原理

2.1 重构端管理首页:src\views\WelcomeView.vue

<template>

    <h1>WelcomeView-----Amin</h1>

</template>

<script>

    import axios from 'axios';

    export default {

        data() {

            return {};

        },

        methods: {

            async getHomeAdminIndex() {

                axios.get('https://localhost:7239/HomeAdmin/Index');

                //console.log(res);

            },

        },

        async mounted() {

            //通过请求拦截器把Token令牌字符串添加到Header字典实例中,从而授权指定用户有权访问指定页面。

          axios.interceptors.request.use(

                config => {

                    if (localStorage.getItem('Token')) {

                        config.headers.Authorization = localStorage.getItem('Token');

                    }

                    return config;

                },

                error => {

                    return Promise.reject(error);

                });

            //通过应答拦截器所对应的状态码进行拦截后,跳转到指定页。

            axios.interceptors.response.use(

                (config) => {

                    return config;

                },

                async error => {

                    let statusErrorInfo = {

                        success: false,

                        message: "错误"

                    };

                    if (error.response?.status === 400) {

                        statusErrorInfo.message =

                            `${error.response?.status}:由于前端所发送的请求中有语法错误,服务器()端不能解析该请求或解析请求时产生错误,从而导致服务器()端已处理前端所发送的请求失败。`;

                        console.log(statusErrorInfo.message);

                        return await this.$router.replace(this.$route.query.redirect ? this.$route.query

                            .redirect : "/Login");

                    }

                    else if (error.response?.status === 401) {

                        statusErrorInfo.message =

                            `${error.response?.status}:由于用户未执行登录操作或Token令牌字符串已经过期,所以没有权限访问当前页面。`;

                        console.log(statusErrorInfo.message);

                        return await this.$router.replace(this.$route.query.redirect ? this.$route.query

                            .redirect : "/Login");

                    }

                    else if (error.response?.status === 403) {

                        statusErrorInfo.message = `${error.response?.status}:该指定用户虽然已经执行登录操作,但该用户没有访问当前页面的权限。`;

                        console.log(statusErrorInfo.message);

                        return await this.$router.replace(this.$route.query.redirect ? this.$route.query

                            .redirect : "/Login");

                    }

                    else if (error.response?.status === 422) {

                        statusErrorInfo.message =

                            `${error.response?.status}:由于前端所发送的请求中所携带的参数实例与服务器()端中对应的API方法所需要的参数实例不匹配,从而导致服务器()端已处理前端所发送的请求失败(response)`;

                        console.log(statusErrorInfo.message);

                        return await this.$router.replace(this.$route.query.redirect ? this.$route.query

                            .redirect : "/Login");

                    }

                    else if (error.response.status >= 500) {

                        statusErrorInfo.message =

                           `${error.response?.status}:服务器()端中对应的API方法在处理前端所发送的请求时产生错误,服务器()API方法未能完成前端所发送的请求,从而导致服务器()端已处理前端所发送的请求失败(response)`;

                        console.log(statusErrorInfo.message);

                        return await this.$router.replace(this.$route.query.redirect ? this.$route.query

                            .redirect : "/Login");

                    }

                    else if (error.response.status >= 505) {

                        statusErrorInfo.message =

                           `${error.response?.status}:由于服务器()端不支持前端所发送的请求的HTTP协议的版本,从而导致服务器()端已处理前端所发送的请求失败(response)`;

                        console.log(statusErrorInfo.message);

                        return await this.$router.replace(this.$route.query.redirect ? this.$route.query

                            .redirect : "/Login");

                    }

                    return Promise.reject(error);

                }

            );

            await this.getHomeAdminIndex();

        },

    };

</script>


2.2 调试

对以上功能更为具体实现和注释见:230220_009shopvue(后端管理首页与Axios拦截守卫原理)。

http://www.lryc.cn/news/13802.html

相关文章:

  • 【前端】小程序开发入门:安装开发工具、目录结构与项目配置
  • Java反序列化漏洞——CommonsBeanutils1链分析
  • 三菱PLC的MC协议配置说明
  • Python基础复习总结
  • 【Linux操作系统】【综合实验五 网络管理与通信】
  • Qt下实现不规则形状窗口显示
  • 使用ribbon实现负载均衡
  • 从页面仔到工程师,前端到底在发挥什么价值
  • Java程序员进阶宝典,让你学习面试无忧!
  • Hadoop HDFS的主要架构与读写文件
  • 面试题练习第五篇
  • hadoop02【尚硅谷】
  • Alist ——本地网盘管理器
  • 【白话科普】聊聊网络架构变革的关键——SDN
  • go gin学习记录4
  • 家政服务小程序实战开发教程015-填充用户信息
  • python+selenium使用webdriver启动chrome出现闪退现象解决
  • 新建idea项目
  • Django框架之类视图
  • win11/10+Azure kinect DK配置 VS2019/2017/2015的方法(简单,亲测可以)
  • 子查询的相关例题
  • vue2.0与vue3.0及vue与react区别
  • 【SQL】MySQL秘籍
  • vue-router 的基本用法
  • 图像显著性目标检测
  • 力扣-查找重复的电子邮箱
  • 如何选择正规可靠的ISO认证机构?
  • React源码解读之更新的创建
  • 【程序人生】从土木专员到网易测试工程师,薪资翻3倍,他经历了什么?
  • C++——C++11第二篇