首页 > 其他分享 >09-axios在Vue中的导入与配置

09-axios在Vue中的导入与配置

时间:2024-06-21 09:58:45浏览次数:22  
标签:拦截器 axios 请求 res 09 Vue defaults data

09-axios

前言

我们接着上一篇文章 08-路由地址的数据获取 来讲。


下一篇文章 10-vuex在Vue中的导入与配置

首先简单了解什么是Axios?

Axios是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,本质上也是对原生XHR的封装,只不过它是Promise的实现版本,符合最新的ES规范。

关于axios的特点,可以查看axios中文文档,还可以了解一下axios, ajax和fetch的详细比较内容。

接下来开始安装axios,在项目目录下执行npm i axios(不同的node版本,成功后的提示不同)

在这里插入图片描述

安装成功后进行引入,在项目目录下src文件夹里创建新的utils文件夹,然后,在文件夹里创建axios.js

/utils/axios.js

/axios/index.js

/utils/request.js

// 1、引入axios内容
import axios from 'axios'

// 2、设置请求默认内容
// 请求服务器地址
axios.defaults.baseURL = 'https://www.xxxx.com:8080'
// 跨域请求是否提供凭据信息(cookie、HTTP认证及客户端SSL证明等),也可以简单的理解为,当前请求为跨域类型时是否在请求中协带cookie。
axios.defaults.withCredentials = true
// 请求头中X-Requested-With字段值为XMLHttpRequest
axios.defaults.headers['X-Requested-With'] = 'XMLHttpRequest'
// 请求头中携带token值
axios.defaults.headers['token'] = localStorage.getItem('token') || ''
// 使用post请求时,发送的数据类型(Content-Type)为 application/json
axios.defaults.headers.post['Content-Type'] = 'application/json'

// axios使用拦截器,我们下面会讲一下拦截器的定义
axios.interceptors.response.use(res => {
  // 服务器返回值非正常情况下执行的代码
  if (typeof res.data !== 'object') {
    alert('服务器异常!')
    return Promise.reject(res)
  }
  if (res.data.resultCode != 200) { // 浏览器状态码不为200(正常)
    if (res.data.message) alert(res.data.message)  //判断是否有错误信息,有则打印错误信息
    if (res.data.resultCode == 416) { // 浏览器状态码为416(未登录)
      alert('未登录,请先登录!')
    }
    return Promise.reject(res.data)
  }
  // 服务器返回值正常情况下执行的代码
  return res.data
})
// 导出axios 实例
export default axios

// 1、引入axios内容
import axios from 'axios'

// 2、设置请求默认内容
// 请求服务器地址
axios.defaults.baseURL = 'https://www.xxxx.com:8080'
// 跨域请求是否提供凭据信息(cookie、HTTP认证及客户端SSL证明等),也可以简单的理解为,当前请求为跨域类型时是否在请求中协带cookie。
axios.defaults.withCredentials = true
// 请求头中X-Requested-With字段值为XMLHttpRequest
axios.defaults.headers['X-Requested-With'] = 'XMLHttpRequest'
// 请求头中携带token值
//axios.defaults.headers['token'] = localStorage.getItem('token') || ''
// 使用post请求时,发送的数据类型(Content-Type)为 application/json
axios.defaults.headers.post['Content-Type'] = 'application/json'

axios.interceptors.request.use(config => {
  config.headers['token'] = localStorage.getItem('token') || '';
  return config
})


// axios使用拦截器,我们下面会讲一下拦截器的定义
axios.interceptors.response.use(res => {
  // 服务器返回值非正常情况下执行的代码
  // if (typeof res.data !== 'object') {
  //   alert('服务器异常!')
  //   return Promise.reject(res)
  // }
  // if (res.data.resultCode != 200) { // 浏览器状态码不为200(正常)
  //   if (res.data.message) alert(res.data.message)  //判断是否有错误信息,有则打印错误信息
  //   if (res.data.resultCode == 416) { // 浏览器状态码为416(未登录)
  //     alert('未登录,请先登录!')
  //   }
  //   return Promise.reject(res.data)
  // }
  // 服务器返回值正常情况下执行的代码
  return res.data
})
// 导出axios 实例
export default axios

关于拦截器

​ 如果我们使用中需要统一处理所有 http 请求和响应, 就需要使用 axios 拦截器。

使用拦截器的原因:

​ 若出现请求数多的情况下,我们将会用到 axios 的一个API:拦截器。
​ 页面发送http请求,很多情况我们要对请求和其响应进行特定的处理,
​ 如果每个请求都附带后端返回的token,我们需要在拿到response之前loading动画的展示等。

拦截器的分类:

​ 拦截器分为 请求(request)拦截器和 响应(response)拦截器。

以上完成后就可以使用了

接下来以get请求为例,使用方式如下:

this.axios.get(url).then(res => {
      //请求成功,触发then中的函数
      console.log(res)  
    })
     .catch(error =>
      //请求失败,触发catch中的函数 可省略
      console.log(error)
    )

某商城的API接口:http://backend-api-01.newbee.ltd/api/v1/index-infos

<template>
  <div id="app">
    <ul>
      <li v-for="(good, index) in list" :key="index">
      {{ good }}
      </li>
    </ul>
  </div>
</template>
 <script>
 import axios from "./utils/axios";
export default {
  data() {
    return {
      list: [],
    };
  },
  mounted(){
    axios.get("http://backend-api-01.newbee.ltd/api/v1/index-infos")
    .then(res => {
      console.log(res);
      this.list = res.data.hotGoodses
    })
  }
};
</script>

请求结果自行判断

关于post请求方式与get类似,不同点在于地址url和参数params分开传递,使用方式如下:

axios.post(url, params).then(res => {
      //请求成功,触发then中的函数
      console.log(res)  
    })
     .catch(error =>
      //请求失败,触发catch中的函数 可省略
      console.log(error)
    )

标签:拦截器,axios,请求,res,09,Vue,defaults,data
From: https://blog.csdn.net/weixin_48053866/article/details/139760822

相关文章

  • vue.config.js基础配置
    constpath=require('path')constUglifyPlugin=require('uglifyjs-webpack-plugin')module.exports={publicPath:'./',//基本路径outputDir:'dist',//输出文件目录lintOnSave:false,//eslint-loader是否在保存的......
  • 深度分析:React Native、Flutter、UniApp、Taro、Vue的差异
    深度分析:ReactNative、Flutter、UniApp、Taro、VueReactNative优势:跨平台代码共享:使用JavaScript和React,可以为iOS和Android开发应用,代码复用率高。活跃社区和生态系统:React和ReactNative有庞大的社区,提供了大量的第三方库和插件。热重载:开发效率高,修改代码后几乎......
  • 解决Vue3项目运行控制台警告
    运行Vue3项目,控制台警告:Featureflag VUE_PROD_HYDRATION_MISMATCH_DETAILS isnotexplicitlydefined.Youarerunningtheesm-bundlerbuildofVue,whichexpectsthesecompile-timefeatureflagstobegloballyinjectedviathebundlerconfiginordertogetbet......
  • Java毕业设计 基于springboot vue音乐网站
    Java毕业设计基于springbootvue音乐网站SpringBoot音乐网站功能介绍首页图片轮播歌曲信息歌曲分类歌曲详情歌曲播放音乐下载评论注册登录个人中心更新信息用户后台:登录个人中心修改密码个人信息音乐下载管理员:登录个人中心修改密码个人信息用户管......
  • Vuex模块化
    创建命名空间mian.jssrc/store/index.jssrc/store/getters.jssrc/store/modules各自管理仓库src/store/modules/testVuexModules.js命名空间模块组件内提交与获取Vuex的值:1.异步操作this.$store.dispatch2.同步操作this.$store.commit创建命名空间mian.jsim......
  • Ant-Design-Vue动态表头并填充数据(含示例代码)
    关注我,持续分享逻辑思维&管理思维&面试题;可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;推荐专栏《10天学会使用asp.net编程AI大模型》,目前已完成所有内容。一顿烧烤不到的费用,让人能紧跟时代的浪潮。从普通网站,到公众号、小程序,再到AI大模型网站。干货满满。学成后可......
  • Vue30_指令3
    一、什么是指令?指令(Directives)是带有 v- 前缀的特殊属性。例如在入门案例中的v-model,代表双向绑定。 二、插值表达式1、花括号格式:{{表达式}}说明:该表达式支持JS语法,可以调用js内置函数(必须有返回值)表达式必须有返回结果。例如1+1,没有结果的表......
  • VuePress使用
    记一篇:安装Vuepress过程也遇到的问题,于是想写篇文章总结一下~~一、介绍VuePress是一个以Markdown为中心的静态网站生成器。你可以使用 Markdown在新窗口打开 来书写内容(如文档、博客等),然后VuePress会帮助你生成一个静态网站来展示它们。官网链接:https://vuepress.vuejs......
  • 基于AD9009的PCIe射频信号采集回放卡
    基于AD9009的PCIe射频信号采集回放卡PCIe射频收发平台75MHz至调谐范围200MHz瞬时带宽基于RF-IC芯片PCIe射器和接收器、集成式频率合成器以及数字信号处理功能。满足3G、4G和5G宏蜂窝时分双工(TDD)基站应用要求。接收链路由两个独立的带宽、直接变频接收器组成,具有出色的动射频......
  • java基于SpringBoot+Vue的失踪人员信息发布与管理系统(源码+lw+部署文档+讲解等)
    文章目录前言详细视频演示项目运行截图技术框架后端采用SpringBoot框架前端框架Vue可行性分析系统测试系统测试的目的系统功能测试数据库表设计代码参考数据库脚本为什么选择我?获取源码前言......