在vue项目中src目录下创建utils>request.js
axios.create
方法创建了一个名为request
的axios实例(设置基本配置信息)request.interceptors.request.use
方法添加了请求拦截器。request.interceptors.response.use
方法添加了响应拦截器。export default request
语句导出了request
实例,以便在其他地方使用该实例进行请求。?import axios from 'axios'
// 创建axios实例
const request = axios.create({
baseURL: 'http://localhost:8080/api/', // 设置baseUrl
timeout: 4000 // 设置超时时间
})
// 请求拦截器
request.interceptors.request.use(
config => {
// 在发送请求之前做些什么,比如添加请求头等
return config
},
error => {
// 对请求错误做些什么
return Promise.reject(error)
}
)
// 响应拦截器
request.interceptors.response.use(
response => {
// 对响应数据做点什么,比如处理错误码等
return response.data
},
error => {
return Promise.reject(error)
}
)
export default request
在main.js中导入?
import request from '@/utils/request'
// 创建一个名为 $request 的全局变量
Vue.prototype.$request = request
request
:? ? ? ? ?1.每次发请求url都要写全
? ? ? ? ? 2.当页面报错时,用户使用时就直接看到页面报错(不友好)
this.$axios({
method: 'post',
url: 'http://localhost:8080/api/upload/selectGoods',
data: {
pageNum: this.pageNum,
pageSize: this.pageSize,
keyWord: this.keyWord,
}
}).then((res) => {
console.log(res + "sssssssss");
let result = res.data.data;
this.goodsData = result.list;
this.total = result.total;
})
效果:?
?
使用request
发请求? ?????????1.每次发请求url只需写不同的部分,相同的已经封装好了。
? ? ? ? ? ?2.当页面报错时,页面会提示相关信息(友好)
this.$request.post('upload/selectGoods', {
data: {
pageNum: this.pageNum,
pageSize: this.pageSize,
keyWord: this.keyWord,
}
}).then((res) => {
if (res.code === '200') {
let result = res.data;
this.goodsData = result.list;
this.total = result.total;
}
}).catch(error => {
if (error.code === 'ECONNABORTED') {
this.$message.error('网络繁忙,请稍后重试')
} else {
console.log('请求发生错误:', error.message)
}
})
?效果: