一、什么是axios
axios是一个基于Promise的HTTP客户端,用于浏览器和Node.js中发送HTTP请求。它支持各种HTTP请求方法,如GET、POST、PUT、DELETE等,并且可以拦截请求和响应,设置请求超时等功能。它也可以与现代前端框架(如Vue.js、React、Angular等)进行集成。
二、如何在Vue.js中使用axios
(1)安装axios
在Vue项目中使用axios之前,需要先安装axios。可以使用npm或yarn命令(必须要有node.js环境)来安装axios:
npm install axios
// 或
yarn add axios
(2)发送HTTP请求
在Vue.js中使用axios非常方便。可以使用axios.get()、axios.post()、axios.put()、axios.delete()等方法来发送不同类型的HTTP请求。下面是一个简单的例子,使用axios从服务器获取数据并将其显示在页面上:
<template>
<div>
<ul>
<li v-for="post in posts" :key="post.id">{{ post.title }}</li>
</ul>
</div>
</template>
<script>
import axios from 'axios'; // 引入axios
export default {
data() {
return {
posts: [],
};
},
mounted() {
axios.get('https://jsonplaceholder.typicode.com/posts')
.then(response => {
this.posts = response.data;
})
.catch(error => {
console.error(error);
});
},
};
</script>
在上述代码中,我们使用了axios.get()方法来获取指定URL的数据。然后,我们处理响应并将数据存储在组件的数据对象中。如果出现错误,我们会在控制台中输出错误消息。
(3)请求参数
除了简单的GET请求外,还可以在请求中添加更多参数,例如请求头、请求体、查询参数等等。例如,以下是使用axios.post()方法向服务器提交JSON数据的示例:
<script>
import axios from 'axios';
export default {
data() {
return {
newUser: {
name: '',
email: '',
password: '',
},
};
},
methods: {
addUser() {
axios.post('https://api.example.com/users', this.newUser, {
headers: {
'Content-Type': 'application/json',
},
})
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error);
});
},
},
};
</script>
在上面的示例中,我们使用axios.post()方法向https://api.example.com/users的URL发送一个名为newUser的JSON对象。我们还添加了一个headers选项,用于设置请求头。
(4)拦截器
还可以使用axios拦截器来修改请求或响应的内容,或者在请求失败时自定义错误消息。例如,以下是一个拦截器的示例,用于在每个请求中添加Authorization头:
<script>
import axios from 'axios';
axios.interceptors.request.use(config => {
const token = localStorage.getItem('token');
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
});
export default {
// ...
};
</script>
在上面的示例中,我们使用axios.interceptors.request.use()方法来添加一个请求拦截器。在拦截器中,我们检查是否存在token,并将其作为Authorization头添加到请求中。也可以使用axios.interceptors.response.use()方法添加响应拦截器。
(5)对axios进行二次封装
在Vue项目中,我们经常需要对axios进行封装以便于统一处理请求和响应。以下是一个示例代码,通过封装axios实现了统一的请求拦截器、响应拦截器及错误处理。
写在一个JavaScript文件中
import axios from 'axios';
// 创建axios实例
const instance = axios.create({
baseURL: 'https://api.example.com/',
timeout: 10000,
});
// 请求拦截器
instance.interceptors.request.use(config => {
const token = localStorage.getItem('token');
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
}, error => {
return Promise.reject(error);
});
// 响应拦截器
instance.interceptors.response.use(response => {
return response.data;
}, error => {
if (error.response) {
// 根据HTTP状态码判断错误类型
switch (error.response.status) {
case 401:
// 处理未授权错误
break;
case 403:
// 处理禁止访问错误
break;
case 404:
// 处理资源不存在错误
break;
default:
// 处理其他错误
break;
}
} else if (error.request) {
// 处理请求超时等错误
} else {
// 处理其他错误
}
return Promise.reject(error);
});
// 封装get方法
export function get(url, params = {}) {
return instance.get(url, { params });
}
// 封装post方法
export function post(url, data = {}) {
return instance.post(url, data);
}
在上述代码中,我们首先创建了一个名为instance的axios实例,并设置了默认的baseURL和timeout。然后,我们使用instance.interceptors.request.use()方法添加了一个请求拦截器,在其中将存储在localStorage中的token作为Authorization头添加到每个请求中。接着,我们使用instance.interceptors.response.use()方法添加了一个响应拦截器,并根据HTTP状态码判断错误类型。最后,我们使用export关键字导出了get和post两个方法,分别用于发起GET和POST请求。
在Vue组件中使用这些方法非常简单。例如,以下是一个示例组件,使用上述封装的get方法从服务器获取数据并将其显示在页面上:
<template>
<div>
<ul>
<li v-for="post in posts" :key="post.id">{{ post.title }}</li>
</ul>
</div>
</template>
<script>
import { get } from '@/utils/request';// 导入封装的get方法
export default {
data() {
return {
posts: [],
};
},
mounted() {
get('/posts')
.then(data => {
this.posts = data;
})
.catch(error => {
console.error(error);
});
},
};
</script>
在上述代码中,我们首先使用import关键字导入封装的get方法,然后在mounted钩子函数中调用该方法并指定要请求的URL。如果请求成功,我们将响应数据存储在组件的数据对象中,并在页面上显示它们。如果请求失败,我们将错误消息输出到控制台。
总之,在Vue.js中使用axios非常方便,它可以帮助我们轻松地与服务器进行通信,并处理异步请求的结果。