Axios拦截器的简单应用方法(vue/cli)

Axios

附上:
axios中文网
http://www.axios-js.com/
vue/cli 文档
https://cli.vuejs.org/

在vue/cli脚手架项目里简单应用axios

  1. 首先要下载安装axios-------------- npm install axios –save
    [cmd命令行内运行]
    在这里插入图片描述

  2. 然后在main.js中引入文件---------- import axios from ‘axios’
    [main.js文件中]
    在这里插入图片描述
    3.然后你就可以全局使用this.axios来调用引入的axios方法了.

好吧,其实上面只是简单的直接引用axios,还没涉及到拦截器

Axios拦截器

首先拦截器分为两种:

  1. 请求拦截器(request)
  2. 响应拦截器(response)

request请求拦截器:
发送请求前统一处理,如:设置请求头headers、应用的版本号、终端类型等。
response响应拦截器:
有时候我们要根据响应的状态码来进行下一步操作,例如:由于当前的token过期,接口返回401未授权,那我们就要进行重新登录的操作(如跳转回登陆界面)

下面我通过从零开始配置axios拦截器,来熟悉一下拦截器的部分用法

下载安装axios

还是先要下载安装axios-------------- npm install axios –save
[cmd命令行内运行]
在这里插入图片描述

创建文件

我们可以在先创建一个utils文件夹,然后在里面创建一个名为axiosInterceptors.js的文件
在这里插入图片描述
PS:
这里不创建也可以,直接在main.js里写(建议单独写个js文件方便查看修改)

引入你需要涉及到的文件(axiosInterceptors.js

import Vue from 'vue' 
import axios from "axios";
import router from "../router";

// 这里我只是简单的应用,所以只引入了这些

创建axios实例(axiosInterceptors.js

在这里插入图片描述

设置请求拦截(axiosInterceptors.js

在这里插入图片描述

Login.vue

这里是指在上文中提到的用户登陆时设置在cookie的token,token保存的方法有很多,这里只是以保存在cookie为例

if (data && data.code === 0) { // 登陆成功返回code为0
      this.$cookie.set("token", data.token);
       // Do something
}

设置响应拦截(axiosInterceptors.js

在这里插入图片描述

main.js中导入设置了拦截器axios (main.js)

import axios from '@/utils/axiosInterceptors
// 挂载全局

Vue.prototype.$axios = axios // ajax请求方法

组件中使用

 this.axios.post("users/v1/login",{ // 相对地址
// 携带的参数,由于创建axios实例时Content-Type的设置,
//这里会是json格式传输  
params:{ 
    uname:this.ruleForm.username,
    upwd:this.ruleForm.password
  }
}).then(result=>{
	//请求的结果,这里是经过了响应拦截器后的
  console.log(result)
})

最后附上axiosInterceptors.js源码

import Vue from "vue";
import axios from "axios";
import router from "../router";

const api = "http://127.0.0.1:3000"; // 配置基础请求域名
//创建一个axios实例,并导出
export const instance = axios.create({
  // `baseURL` 将自动加在 `url`(axios发出的请求地址) 前面,除非 `url` 是一个绝对 URL。
  baseURL: api, //所有请求地址,自动携带api前缀地址
  //配置请求头
  headers: {
    //提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 会进行了 URL 转码
    // 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',

    //作为请求头,用来告诉服务端提交的数据(消息主体)是序列化后的 JSON 字符串
    "Content-Type": "application/json;charset=utf-8"
  },
  timeout: 30000, //设置网络超时
  withCredentials: true //请求头是否带cookie
});

/**
 * 请求拦截
 */
instance.interceptors.request.use(
  config => {
    // Do something before request is sent
    config.headers["token"] = Vue.cookie.get("token"); // 请求头带上token
    //这里的token是在用户登录时, 通过this.$cookie.set("token", data.token)设置的
    return config;
  },
  function(error) {
    // Do something with request error
    return Promise.reject(error);
  }
);

/**
 * 响应拦截
 */

instance.interceptors.response.use(
  response => {
    switch (response.data.code) {
      case 400: // 401, 用户未登录
        router.push("/login"); //未登录时,让路由跳转至登陆界面
        return;
      case 401: // 401, token失效
        //Do someting here
        //清除用户信息,如Vue.cookie.delete('token'),重置store等操作
        Vue.cookie.delete("token"); // 这里就以简单的清除cookie中的token为例
        router.push("/login"); // token失效时,返回登陆界面
        return;
      default:
        //200,正常响应
        //Do someting here
        return response; // 返回响应回来的数据,使请求正常接收(放行,让响应通过拦截器)
    }
  },
  error => { //响应错误时
    router.push("/login"); // 返回登陆页面
    return Promise.reject(error);
  }
);
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值