Vue学习:axios

朱雀 2023-10-04 19:54 167阅读 0赞

Axios

1. axios的简介

1.1 axios是什么

Axios 是一个基于 promise 网络请求库,作用于node.js 和浏览器中。 它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生 node.js http 模块, 而在客户端 (浏览端) 则使用 XMLHttpRequests。

  • 前端最流行的ajax请求库
  • react/vue官方推荐使用axios发送ajax请求
  • 官方网站: https://www.axios-http.cn/

1.2 axios特征

  • 从浏览器创建 XMLHttpRequests
  • 从 node.js 创建 http 请求
  • 支持 Promise API
  • 拦截请求和响应
  • 转换请求和响应数据
  • 取消请求
  • 自动转换JSON数据
  • 客户端支持防御[XSRF]

2. axios的使用

2.1 axios的API

  • axios(config): 通用的发送任意请求的方式
  • axios(url[, config]): 可以只指定url发送get请求
  • axios.request(config): 等同于axios(config)
  • axios.get(url[, config]): 发送get请求
  • axios.delete(url[, config]): 发送delete请求
  • axios.post(url[, data[, config]]):发送post请求
  • axios.put(url[, data[, config]]): 发送put请求
  • axios.patch(url[, data[, config]]): 发送patch请求
  • axios.head(url[, config])
  • axios.options(url[, config])
  • axios.defults.xxx:请求的默认全局配置
  • axios.interceptors.request.use(): 添加请求拦截器
  • axios.interceptors.response.use(): 添加响应拦截器
  • 有时候, 我们可能需求同时发送两个请求,使用axios.all, 可以放入多个请求的数组.
    axios.all([]) 返回的结果是一个数组,使用 axios.spread 可将数组 [res1,res2] 展开为 res1, res2

2.2 常见的配置选项

  • 请求地址
  • url: ‘/user’,
  • 请求类型
  • method: ‘get’,
  • 请根路径
  • baseURL: ‘http://www.mt.com/api’,
  • 请求前的数据处理
  • transformRequest:[function(data){}],
  • 请求后的数据处理
  • transformResponse: [function(data){}],
  • 自定义的请求头
  • headers:{‘x-Requested-With’:‘XMLHttpRequest’},
  • URL查询对象
  • params:{ id: 12 },
  • 查询对象序列化函数
  • paramsSerializer: function(params){ }
  • 请求体
  • data: { key: ‘aa’},
  • 超时设置
  • timeout: 1000,

2.3 安装axios

第一种方式: 使用npm

  1. npm install axios

第二种方式: 使用cdn

  1. <script src="https://unpkg.com/axios/dist/axios.min.js"></script>

第三种方式: 使用yarn

  1. yarn add axios

2.4 vue3使用axios发送请求

  1. 安装axios插件

    npm install axios

  2. 在main.js文件使用axios

    import axios from ‘axios’
    const app = createApp(App);
    //使用axios, 并把axios作为app的全局属性
    app.config.globalProperties.$axios=axios;
    app.mount(‘#app’)

  3. axios发送get请求demo:

    this.$axios.get(“https://autumnfish.cn/cloudsearch?keywords=“ + this.query)

    1. .then(function(response) {
    2. console.log(response)
    3. that.musicList = response.data.result.songs;
    4. }, function(err) {
    5. });

3.封装axios的工具

安装qs

  1. npm install qs

在src目录下创建一个utils目录,用于存放一些工具的js文件, 在这个目录下我们创建一个request.js用于封装axios

  1. import axios from 'axios'
  2. import qs from 'qs'
  3. /**
  4. * axios的传参方式:
  5. * 1.url 传参 一般用于Get和Delete 实现方式:config.params={JSON}
  6. * 2.body传参 实现方式:config.data = {JSON},且请求头为:headers: { 'Content-Type': 'application/json;charset=UTF-8' }
  7. * 3.表单传参 实现方式:config.data = qs.stringify({JSON}),且请求头为:且请求头为:headers: { 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8' }
  8. */
  9. // axios实例
  10. const $http = axios.create({
  11. baseURL: '',
  12. timeout: 60000,
  13. headers: {
  14. 'Content-Type': 'application/json;charset=UTF-8' }
  15. })
  16. // 请求拦截器
  17. $http.interceptors.request.use(
  18. (config) => {
  19. // 追加时间戳,防止GET请求缓存
  20. if (config.method?.toUpperCase() === 'GET') {
  21. config.params = {
  22. ...config.params, t: new Date().getTime() }
  23. }
  24. if (Object.values(config.headers).includes('application/x-www-form-urlencoded')) {
  25. config.data = qs.stringify(config.data)
  26. }
  27. return config
  28. },
  29. error => {
  30. return Promise.reject(error)
  31. }
  32. )
  33. // 响应拦截器
  34. $http.interceptors.response.use(
  35. response => {
  36. const res = response.data
  37. return res
  38. },
  39. error => {
  40. return Promise.reject(error)
  41. }
  42. )
  43. // 导出 axios 实例
  44. export default $http

在main.js中,把$http绑定到app对象上

  1. // 导入封装好的axios并挂载到Vue全局属性上
  2. import $http from './utils/request'
  3. app.config.globalProperties.$http = $http

使用:

  1. methods: {
  2. sendAjax(){
  3. this.$http.get("https://autumnfish.cn/cloudsearch?keywords=" + this.query)
  4. .then(function(response) {
  5. console.log(response)
  6. }, function(err) {
  7. });
  8. }
  9. },

发表评论

表情:
评论列表 (有 0 条评论,167人围观)

还没有评论,来说两句吧...

相关阅读

    相关 vue axios

    axios 简介 axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,它本身具有以下特征: 1. 从浏览器中创建 XMLHttpR

    相关 vue+vuex+axios

    在写vue+vuex+axios请求数据之前,我们需要了解下什么是Vuex。 \\ Vuex \\ vuex是一个集中式的存储仓库【状态】,类似于 本地存储、数