• vue --- axios拦截器+form格式请求体


    在vue2.x中使用CLI生成的模板有很大改变,需要自己手动在main.ts同级目录下新建interceptors.ts

    interceptors.ts

    import axios from 'axios';
    import router from './router';
    
    
    
    // axios配置
    axios.defaults.timeout = 6000;
    axios.defaults.baseURL = 'http://192.168.7.69:8000';
    axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
    
    // 设定请求头内容格式为form
    
    
    
    // http request 拦截器
    axios.interceptors.request.use(
        config =>{
            if (localStorage.token){ // 判断token是否存在
                config.headers.Authorization = localStorage.token;
            }
            return config;
        },
        error => {
            return Promise.reject(error)
        }
    );
    
    // http response 拦截器
    axios.interceptors.response.use(
        response =>{
            return response
        },
        error => {
            if (error.response.data.result === 2){
            // 这里是http请求失败后的返回判断,根据个人情况判断
                router.replace('/login')
                    .then(
                        r =>{
                            localStorage.clear();
                            error.message = '身份已过期,请重新登录';
                        }
                    );
            }else {
                return Promise.reject(error)
            }
        }
    );
    
    router.beforeEach(((to, from, next) => {
        if (to.meta.requireAuth){ //判断该路由是否需要登陆权限
            if(localStorage.token){ //token存在
                next()
            }else {
                next(  // token不存在
                    {
                        path:'/login',
                        query:{
                            redirect:to.fullPath
                        }
                    }
                )
            }
        }else { //如果不需要权限校验,直接跳转
            next()
        }
    }));
    
    export default axios;
    

    main.ts

    在main.ts中导入拦截器

    import axios from './interceptors';
    

    添加到VUE属性上

    Vue.use(VueAxios,axios);
    

    在使用的地方

    this.axios.get('') // get请求
    

    存储token到localstorage

    登录成功之后

     window.localStorage["token"] = res.data.token
    

    使用qs设置form表单请求体

    网上有人说qs包含在axios中,但我在使用的时候不能导入。提示下载@types/qs,之后再用到的模块导入

    import QS from 'qs'
    

    应用:

    let reqData = {
                 username:this.ruleForm.username,
                 password:md5(this.ruleForm.password)
             };
             
    this.axios.post("/login",QS.stringify(reqData))
                         .then()
    

    介绍了一些基本使用,具体问题欢迎留言探讨!

  • 相关阅读:
    页面实现文件的下载
    微信小程序拉起登录的操作
    css3之border-radius理解
    web前端常用网站--更新中
    小程序中遇见文件过大的话就需要分包
    JS中的“&&”与“&”和“||”“|”有什么区别?
    ts中有时莫名报错
    浏览器解析JavaScript的原理
    在vue中axios的问题
    eslint的规则
  • 原文地址:https://www.cnblogs.com/gyyyblog/p/11736742.html
Copyright © 2020-2023  润新知