请求拦截器

397 阅读1分钟

请求拦截器的作用是在请求发送前进行一些操作,例如在每个请求体里加上token,统一做了处理如果以后要改也非常容易。

关于拦截,这里只说原理,前端的请求,最终还是离不开 ajax,像vue 的 vue-resource 、axios,都只是对ajax进行了统一的封装,它暴露出来的拦截器,其实就是写了一个方法,把ajax写在这个方法里面,(我们先说请求拦截器哈)在执行这个方法的时候,先将请求时要添加给请求头的那些数据(token、后端要的加密码…具体要看实际情况)先执行一遍,都赋值给一个变量,然后再统一传给ajax,接下来就是执行ajax,这就是所谓的请求拦截,其实就是先执行要添加的数据,然后再执行ajax,如果把这个添加数据的过程抽出来,就成了所谓的请求拦截器;

axios.interceptors.request.use(
    config =>{
        // 在发送请求之前做些什么:headers添加token
        config.headers['token'] = 'c5d1b483-18c8-4690-b829-48b8f525f527';
        
        loading
        Toast.loading({
            duration: 0, // 持续展示 toast
            forbidClick: true, // 禁用背景点击
            mask: false, // 是否显示遮罩层
            message: '数据加载中...',
        });
        
        // 特定接口不显示数据加载中提示
        // if (config.url.includes('/api/mobile/index.php?w=member_favorites&t=favorites_add')) {
        //     // 清除加载动画
        //     Toast.clear();
        // } else {
        //     Toast.loading({
        //         duration: 0, // 持续展示 toast
        //         forbidClick: true, // 禁用背景点击
        //         mask: false, // 是否显示遮罩层
        //         message: '数据加载中...',
        //     });
        // }
        
        return config;
    }, 
    error => {
        // 对请求错误做些什么
        return Promise.reject(error);
    }
)