axios作用:Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中
1.安装
npm install axios
2.入口文件main.js中引入
import axios from 'axios'
Vue.prototype.$axios = axios // 挂载在vue实例化对象上
3.在config/index.js中的设置proxyTable的值为:
image.png
如果本身的接口地址就有 '/api' 这种通用前缀,就可以把 pathRewrite 删掉
因为在 ajax 的 url 中加了前缀 '/api',而原本的接口是没有这个前缀的,所以需要通过 pathRewrite 来重写地址,将前缀 '/api' 转为 '/'
4.简约版
this.$axios({
url: xxxxxxx,
method: 'post',
data: JSON.stringify(this.id)
}).then()
5.加强版封装axios
import axios from 'axios'
import { MessageBox, Message } from 'element-ui'
import store from '@/store'
import { getToken } from '@/utils/auth' // vuex中存好的token
// create an axios instance
const service = axios.create({
baseURL: process.env, // 根据项目设置 url = base url + request url
withCredentials: false, // send cookies when cross-domain requests
timeout: 5000 // request timeout
})
// request interceptor
service.interceptors.request.use(
config => {
// do something before request is sent
if (store.getters.token) {
config.headers['X-Token'] = getToken()
}
return config
},
error => {
// do something with request error
console.log(error, "error") // for debug
// return Promise.reject(error)
}
)
// response interceptor
service.interceptors.response.use(
response => {
const res = response.data
// if the custom code is not 20000, it is judged as an error.
if (res.code !== 0) {
Message({
message: res.msg,
type: 'error',
duration: 5 * 1000
})
} else {
return res
}
},
error => {
if (error.message == "Request failed with status code 401") {
Message({
type: 'error',
message: '登陆失效,请从新登陆'
})
store.dispatch('user/resetToken')
} else if (error.message == "Request failed with status code 500") {
Message({
type: 'error',
message: '网络连接出错,请稍后再试!'
})
} else {
Message({
message: error.message,
type: 'error',
duration: 5 * 1000
})
return Promise.reject(error)
}
}
)
export default service
应用:
image.png