Axios可以用来异步发起Request请求来获取数据
<script src="<https://unpkg.com/axios/dist/axios.min.js>"></script>
# axios.get(地址?key=value&key2=values).then(function(response){},function(err){})
# 示例
search : function(){
var that = this;
axios.get("<https://autumnfish.cn/search?keywords=>" + this.keyword).then(function(response){
console.log(response)
that.music_arr = response.data.result.songs
}, function(err){
console.log(err)
})
},
# axios.post(地址,{key:value,key2:value2}).then(function(response){},function(err){})
# 示例
Mpost : function(){
axios.post("<https://autumnfish.cn/api/user/reg",{username:"222阿香3>"})
.then(function(response){
console.log(response);
},function(err){
console.log(err);
})
},
npm 安装:**npm install** axios
箭头函数继承了父级的作用域,所以可以不用var that=this
了
Axios与Vue结合
// main.js
import axios from "axios"
axios.defaults.baseURL = "<http://localhost:8080>" // 修改默认配置 请求根路径
Vue.prototype.$http = axios // Axios绑定在Vue上面
// 在其他页面上使用Axios
this.$http.get("db/user").then((resp) =>{
console.log(resp)
})
解决跨域问题直接在SpringBoot上面加@CrossOrigin
通过创建对象,我们可以配置的axios更好用
// create an axios instance
const service = axios.create({
baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
// withCredentials: true, // send cookies when cross-domain requests
timeout: 5000 // request timeout
})
axios拦截器分为请求拦截器和响应拦截器
请求拦截器:在发出请求时经过的地方
// 请求拦截器
service.interceptors.request.use(
// 请求拦截器 正常
config => {
// 在发送请求之前做些什么
if (store.getters.token) {
// 让每个请求携带token
// ['X-Token'] 是一个自定义头部key
// 根据实际情况修改
config.headers['X-Token'] = getToken()
}
return config
},
// 请求拦截器 异常
error => {
// 处理请求错误
console.log(error) // 调试用
return Promise.reject(error)
}
响应拦截器:请求回来的时候,经过的地方
// 响应拦截器
service.interceptors.response.use(
// 响应拦截器 2xx正常
response => {
const res = response.data
// 如果自定义code不是20000,则判断为错误
if (res.code !== 20000) {
Message({
message: res.message || '错误',
type: 'error',
duration: 5 * 1000
})
// 50008: 非法的token;50012: 其他客户端登录;50014: token过期;
if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
// 重新登录
MessageBox.confirm('您已经注销,您可以取消以保留在此页面,或再次登录', '确认注销', {
confirmButtonText: '重新登录',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
store.dispatch('user/resetToken').then(() => {
location.reload()
})
})
}
return Promise.reject(new Error(res.message || '错误'))
} else {
return res
}
},
// 响应拦截器 异常
error => {
console.log('err' + error) // 调试用
Message({
message: error.message,
type: 'error',
duration: 5 * 1000
})
return Promise.reject(error)
}