入门级别axios的请求拦截

时间:2024-03-23 18:11:56

相信使用vue的很多童鞋,都知道axios,因为现在vue官网也是推荐我们使用axios往后台发送请求

其实吧 请求拦截不是必须的  但是用好的话,确实可以帮我节省很多功夫和代码量

说成请求拦截 这么高大上 其实 用俗话说就是 请求之前 先检验一遍 发送的数据或者获取下token数据 

一般我们在开发的时候 从后台的数据回来我们都要判断下状态吗 这样会导致我们代码量会增加不少

如果我们在 回来之前拦截下 提前将数据过滤去下 是不是就达到了  事半功倍的效果了

1.在实现之前 我先用 kao框架 搭建了一个简易的后台 用来用户登录使用

端口号  是   http://localhost:3000/user/loginUser   请求方法是  post

入门级别axios的请求拦截

这里我使用了element-ui 实现了快速 布局一个小的demo

2.准备一个vue脚手架  安装好 axios

在src目录下创建一个  utils 文件夹 专门放置一些工具文件

我们创建一个 request.js  来设置 基础的配置

import axios from "axios"; //引用axios

// axios 配置

axios.defaults.timeout = 5000; //设置连接超时时间

axios.defaults.baseURL = "http://localhost:3000/"; //这是调用数据接口,项目上线的时候修改这个地方就可以了

也可以这样书写

const service=axios.create({

        timeout:5000,

       baseUrl:"http://localhost:3000"   // 我们在请求接口的时候就不同写前面 会自动我们补全

})

// 如:http://localhost:3000/user/loginUser            使用aixos的时候直接写   /user/loginUser   就可以了

// 请求拦截器(所有发送的请求都要从这儿过一次),通过这个,我们就可以把token传到后台,

我这里是使用sessionStorage来存储token等权限信息和用户信息  token一般时间 比较短

service.interceptors.request.use(    

  config => {

    const token = sessionStorage.getItem("token"); //获取存储在本地的token,如果需要token就在这里带上

    config.data = JSON.stringify(config.data);  // 这里我们也可以在过滤下 请求参数数据

    config.headers = {    // 设置请求头   常用语post请求 

         "Content-Type": "application/json"               

     };

     if (token) {

          config.headers.Authorization = "Token " + token; //存在的话 就携带 token

    }

    return config;   //  然后把配置返回

  },

  err => {

    console.log(err)   //  如果出错的话 打印出来错误看看

  }

);

//  响应拦截器    请求回来的结果 先在这里过一遍

service.interceptors.response.use(

  response => { 

    if (response.status == 201) { //  请求回来的状态除了 200 其他的 均是不对的数据 在这里统一处理

      this.$router.push({

        path: "/login"      //  如果回来状态不对 还是返回 请求页面

      });

    }

    return response;   // 返回请求回来的数据

  },

  err => {

    console.log(err)

  }

);

export default service;   // 把配置好的对象 导出

3.在src文件夹下 创建一个 api的文件夹    /api/user.js

import request from "../utils/request.js";

// 导出登陆的方法  , 请求的时候只用把参数传递进来就好了

export function login(data) {

  return request({

    url: "/user/loginUser",

    method: "post",

    data

  });

}

4.前台数据

import { login } from "../api/index";    //  引入 login方法

export default {

  data() {

    return {

      ruleForm: {

        userName: "",

        password: ""

      }

    };

  },

  methods: {

    submitForm() {

      login(this.ruleForm).then(res => {

        console.log(res);  //  如果一切配置完成 这里应该返回的res就是从后台请求到的数据

      });

    }

  }

};

5.总结 

请求拦截 可以要可不要 具体情况还是根据项目来说的,适合项目的才是好方法

最后复习下普通的axios请求的方法 

axios({

   url:"",

   method:"get"

  params:{}

})

axios({

   url:"",

   method:"post"

   data:{}

})