vue封装axios网络请求
时间: 2023-08-19 17:06:23 浏览: 158
Vue封装axios网络请求可以通过创建一个request.js文件来实现。在这个文件中,首先需要导入axios库,并创建一个axios实例。然后可以定义一个request函数,该函数接受config、success和failure三个参数。在函数内部,使用创建的axios实例发送网络请求,并根据请求结果调用success或failure函数。这样就可以将axios网络请求封装成一个可复用的函数。[2]
在Vue项目中使用封装好的axios网络请求,可以在需要发送请求的组件中导入request.js文件,并调用request函数,传入相应的参数。可以根据需要选择不同的请求方式,如axios.get、axios.post等。这样就可以方便地进行网络请求,并处理请求结果。[3]
相关问题
vue封装axios超时请求
在 Vue 中封装 Axios 实现超时请求,你可以按照以下步骤进行操作:
1. 安装 Axios:首先,确保你已经安装了 Axios,可以使用以下命令进行安装:
```bash
npm install axios
```
2. 创建一个 axios 实例:在你的项目中,创建一个名为 `http.js`(或者其他你喜欢的名称的文件,并编写以下内容:
```javascript
import axios from 'axios';
const instance =.create({
timeout: 5000, // 设置请求超时时间,单位为毫秒
});
export default instance;
```
在这个文件中,我们使用 `axios.create()` 方法创建了一个实例,并设置了超时时间为 5000 毫秒(即 5 秒)。
3. 封装请求方法:在你的封装请求的文件(比如 `api.js`)中,引入 `http.js` 文件,并编写请求方法的代码,例如:
```javascript
import http from './http';
export function fetchData() {
return http.get('/api/data')
.then(response => {
return response.data;
})
.catch(error => {
console.error(error);
throw error;
});
}
```
在这个示例中,我们使用 `http.get()` 方法发送一个 GET 请求,并返回响应数据。如果请求出现错误,我们打印错误信息并抛出异常。
这样,你就可以在 Vue 组件中使用封装的请求方法来发送请求,并且会自动处理超时。例如,在你的组件中可以这样使用:
```javascript
import { fetchData } from './api';
export default {
mounted() {
fetchData()
.then(data => {
console.log(data);
})
.catch(error => {
console.error(error);
});
}
}
```
这样,当请求超过 5 秒钟没有返回响应时,就会触发超时错误,并打印错误信息。
记得根据你的具体需求,调整超时时间和其他配置。
vue封装axios请求
在Vue中使用axios进行网络请求是非常常见的。我们可以对axios进行封装来方便地在Vue中使用。这里提供一个例子,包括axios的安装、请求拦截器、设置请求超时时间以及post请求头的设置。
首先,我们需要安装axios,可以通过npm install axios命令来进行安装。后,我们可以在Vue项目中的main.js文件中引入axios,并且将其挂载到Vue原型上,这样在组件中就可以通过this.$http来进行访问。接下来,我们可以封装一个request函数,封装axios的请求拦截器、设置请求超时时间以及post请求头的设置。
下面是一个简单的封装axios请求的例子:
1. 安装axios
```
npm install axios
```
2. 在main.js中引入axios并挂载到Vue原型上
```
import axios from 'axios'
Vue.prototype.$http = axios
```
3. 封装request函数
```
import axios from 'axios'
import store from '@/store/index'
// 创建axios实例
const service = axios.create({
timeout: 10000 // 请求超时时间
})
// 请求拦截器
service.interceptors.request.use(
config => {
// 每次发送请求之前判断vuex中是否存在token
// 如果存在,则统一在http请求的header都加上token,这样后台根据token判断你的登录情况
// 即使本地存在token,也有可能token是过期的,所以在响应拦截器中要对返回状态进行判断
const token = store.state.token
token && (config.headers.Authorization = token)
return config
},
error => {
return Promise.error(error)
}
)
// 响应拦截器
service.interceptors.response.use(
response => {
// 如果返回的状态码为200,说明接口请求成功,可以正常拿到数据
// 否则的话抛出错误
if (response.status === 200) {
return Promise.resolve(response.data)
} else {
return Promise.reject(response)
}
},
error => {
// 服务器返回不是 2 开头的情况,会进入这个回调
// 可以根据后台返回的状态码进行不同的操作
if (error.response.status) {
switch (error.response.status) {
// 401: 未登录
// 未登录则跳转登录页面,并携带当前页面的路径
// 在登录成功后返回当前页面,这一步需要在登录页操作。
case 401:
router.replace({
path: '/login',
query: {
redirect: router.currentRoute.fullPath
}
})
break
// 403 token过期
// 登录过期对用户进行提示
// 清除本地token和清空vuex中token对象
// 跳转登录页面
case 403:
Toast({
message: '登录过期,请重新登录',
duration: 1000,
forbidClick: true
})
// 清除token
localStorage.removeItem('token')
store.commit('loginSuccess', null)
// 跳转登录页面,并将要浏览的页面fullPath传过去,登录成功后跳转需要访问的页面
setTimeout(() => {
router.replace({
path: '/login',
query: {
redirect: router.currentRoute.fullPath
}
})
}, 1000)
break
// 404请求不存在
case 404:
Toast({
message: '网络请求不存在',
duration: 1500,
forbidClick: true
})
break
// 其他错误,直接抛出错误提示
default:
Toast({
message: error.response.data.message,
duration: 1500,
forbidClick: true
})
}
return Promise.reject(error.response)
}
}
)
export default service
```
4. 在组件中使用request函数
```
import request from '@/utils/request'
// 发送get请求
request.get(url, params).then(res => {
console.log(res)
}).catch(err => {
console.log(err)
})
// 发送post请求
request.post(url, data).then(res => {
console.log(res)
}).catch(err => {
console.log(err)
})
```
--相关问题--:
阅读全文
相关推荐













