使用拦截器统一处理headers,需要的朋友可以参考下,希望能帮助到大家。
1、安装 axios , 命令: npm install axios --save-dev
2.在接口中获取adminToken:
methods: {
async lanjie () {
let res = await apiAddress()
this.$store.commit('LOGIN', res.data.data) // 把token存储起来
}
}
3.使用vuex,需要在main.js文件里注册store文件
import Vue from 'vue'
import App from './App'
import router from './router'
import store from './store'
/* eslint-disable no-new */
new Vue({
el: '#app',
router,
store,
template: '<App/>',
components: { App }
})
4.store.js里对获取的adminToken进行存储
import Vue from 'vue'
import vuex from 'vuex'
Vue.use(vuex)
export default new vuex.Store({
state: {
token: window.sessionStorage.getItem('token') //在state里使用
},
mutations: {
LOGIN: (state, data) => {
// 更改token的值
state.token = data
window.sessionStorage.setItem('token', data) // 存到sessionStorage中
}
}
})
5、新建文件 axios.js ,内容如下:
import axios from 'axios'
import store from '../src/store' //引入store文件
import QS from 'qs' //引入QS
axios.defaults.baseURL = 'https://www.easy-mock.com/'
// 添加请求拦截器
axios.interceptors.request.use(function (config) {
if (store.state.token) {
config.headers.adminToken = store.state.token;
}
// 在发送请求之前设置好统一的admingToken
return config
}, function (error) {
// 对请求错误做些什么
return Promise.reject(error)
});
// 添加响应拦截器
axios.interceptors.response.use(function (response) {
// 对响应数据做点什么
return response
}, function (error) {
// 对响应错误做点什么
return Promise.reject(error)
});
/**
* 封装post请求
* @param {String} url [请求的url地址]
* @param {Object} params [请求时携带的参数]
*/
export function post (url, params) {
return new Promise((resolve, reject) => {
axios.post(url, QS.stringify(params))
.then(res => {
resolve(res.data)
})
.catch(err => {
reject(err.data)
})
})
}
6.为了避免接口在各个页面调取混乱,统一api接口处理:
/**
* api接口统一管理
*/
import {post} from './axios'
export const apiAddress = () => post('mock/5cdd764ffd487e51be5eb0d2/example/adminToken')
//注意:apiAddress 函数参考序号2的apiAddress
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是一个个人学习交流的平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽,造成漏登,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。