0


【前后端数据交互:Axios】

前后端数据交互:Axios

Axios 介绍

  在前端页面展示的数据大多数都是通过访问一个API获取的,做这件事的方法有好几种,例如jquery ajax、vue-resource、axios,而vue-resource是vue插件,但3版本不再更新,目前官方推荐主流的axios,aixos是一个http请求库。
官方文档:http://www.axios-js.com/zh-cn/docs/

Axios 安装

1、安装axios:npm install axios
2、在main.js文件中全局注册
3、在组件中使用

  1. //安装axios
  2. npm install axios
  3. //在main.js文件中全局注册
  4. import { createApp } from "vue";
  5. import App from "./App.vue";
  6. import router from "./router";
  7. import Test from "@/components/Test";
  8. import axios from "axios";
  9. //createApp(App).use(router).mount("#app");
  10. const app = createApp(App);
  11. app.use(router).use(router).mount('#app');
  12. app.component('Test', Test)
  13. app.config.globalProperties.$axios=axios

从API获取用户数据,在前端展示:

  1. <template><tableborder="1px"><thead><tr><td>ID</td><td>用户</td><td>邮箱</td><td>性别</td><td>地址</td></tr></thead><tbodyv-for="i in username":key="i.id"><tr><td>{{ i.id }}</td><td>{{ i.username }}</td><td>{{ i.email }}</td><td>{{ i.sex }}</td><td>{{ i.city }}</td></tr></tbody></table><buttontype="button"@click="getData">获取用户信息</button></template><script>
  2. export default {
  3. name: "TestUser",
  4. data(){
  5. return{
  6. username: ""
  7. }
  8. },methods:{
  9. getData(){
  10. this.$axios.get('http://127.0.0.1:8888/api/v1/user') //过去接口数据
  11. .then(response => (this.username=response.data.data)) //将获取到的数据赋值给
  12. }
  13. }
  14. }
  15. 可以加created实现打开页面自动加载

Axios发送post请求

  1. <template><formaction="#">
  2. 用户名:<inputtype="text"v-model="form.username">
  3. 密 码:<inputtype="password"v-model="form.password"><button@click="btn">登录</button></form><pstyle="color: red"v-if="notic">用户名或密码不能为空</p></template><script>exportdefault{name:"postreq",data(){return{form:{username:"",password:""},notic:false}},methods:{btn(){if(this.form.username ==""||this.form.password ==""){this.notic =true}else{this.notic =false
  4. console.log(this.form)this.$axios.post("http://127.0.0.1:8888/api/v1/user",this.form)}}}}</script><stylescoped></style>

Axios 异常处理

  很多时候我们可能并没有从API 获取想要的数据。这可能是由于很多种因素引起的,比如axios 调用可能由于多种原因而失败,包括但不限于:
  • API 不工作了;
  • 请求发错了;
  • API 没有按我们预期的格式返回信息。
 可以使用catch异常处理这些问题。
模拟连接一个未存在的地址,前端给出提示:

  1. <template><tableborder="1px"><thead><tr><td>ID</td><td>用户</td><td>邮箱</td><td>性别</td><td>地址</td></tr></thead><tbodyv-for="i in username":key="i.id"><tr><td>{{ i.id }}</td><td>{{ i.username }}</td><td>{{ i.email }}</td><td>{{ i.sex }}</td><td>{{ i.city }}</td></tr></tbody></table><buttontype="button"@click="getData">获取用户信息</button></template><script>exportdefault{name:"TestUser",data(){return{username:"",error:"获取数据失败,请稍后再试"}},methods:{getData(){this.$axios.get('http://127.0.0.1:8888/user.json1')//过去接口数据.then(response=>{this.username=response.data.data})//将获取到的数据赋值给.catch(error=>{
  2. console.log(error)alert(this.error)})}},created(){this.getData()}}</script><stylescoped>

Axios 全局默认值

  在开发中,几乎每个组件都会用到axios发起数据请求,如果每次都填写完整的请求路径,不利于后期维护。这时可以设置全局axios默认值。
在main.js里定义

  1. axios.defaults.baseURL = 'http://127.0.0.1:8888' //设置全局默认值
  2. axios.defaults.timeout = 5000 //设置5秒超时时间

在组件里直接写接口地址即可:

  1. getData(){
  2. this.$axios.get('/api/v1/username') //直接写路径就可以了
  3. .then(response => {this.username=response.data.data})
  4. .catch(error =>{
  5. console.log(error)
  6. alert(this.error)
  7. })
  8. }

Axios 自定义实例默认值

  有时候服务端接口有多个地址,就会涉及请求的域名不同、配置不同等,这时自定义实例可以很好解决。
1、创建src/api/test1.js文件
在这里插入图片描述
2、自定义实例

  1. import axios from "axios";
  2. const instance1 = axios.create({
  3. baseURL: "http://192.168.0.1",
  4. timeout: 5000
  5. })
  6. export default instance1 //暴露函数

3、全局main.js注册

  1. import { createApp } from "vue";
  2. import App from "./App.vue";
  3. import router from "./router";
  4. import Test from "@/components/Test";
  5. //import axios from "axios"; 原本注册的axios要取消
  6. import axios from "./api/test1";
  7. //createApp(App).use(router).mount("#app");
  8. const app = createApp(App);
  9. app.use(router).use(router).mount('#app');
  10. app.component('Test', Test)
  11. app.config.globalProperties.$test1=axios //全局注册

4、组件使用

  1. getData(){
  2. this.$test1.get('/test/user') //原本的$axios改为新注册的$test1
  3. .then(response => {this.username=response.data.data})
  4. .catch(error =>{
  5. console.log(error)
  6. alert(this.error)
  7. })
  8. }

Axios 拦截器

拦截器可以拦截每一次请求和响应,然后进行相应的处理。
 请求拦截应用场景:
  • 发起请求前添加header
 响应拦截应用场景:
  • 统一处理API响应状态码200或非200的提示消息
  • 统一处理catch异常提示信息
请求/响应拦截示例:

  1. import axios from "axios";
  2. const instanceUrl = axios.create({
  3. baseURL: "http://127.0.0.1:8888",
  4. timeout: 5000
  5. })
  6. export default instanceUrl
  7. instanceUrl.interceptors.request.use(config => {
  8. config.headers['testHeader'] = '123456'
  9. return config;
  10. },error =>{
  11. //alert("请求接口失败")
  12. console.log("1111111")
  13. return Promise.reject(error)
  14. })
  15. instanceUrl.interceptors.response.use(response =>{
  16. return response;
  17. }, error =>{
  18. console.log(error);
  19. return Promise.reject(error)
  20. })

本文转载自: https://blog.csdn.net/qq_41975698/article/details/125974944
版权归原作者 落雪映青衣、 所有, 如有侵权,请联系我们删除。

“【前后端数据交互:Axios】”的评论:

还没有评论