首页 > 其他分享 >在Vue中的使用axios

在Vue中的使用axios

时间:2023-07-26 13:03:43浏览次数:50  
标签:拦截器 请求 get 使用 Vue axios error response

一、什么是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非常方便,它可以帮助我们轻松地与服务器进行通信,并处理异步请求的结果。

标签:拦截器,请求,get,使用,Vue,axios,error,response
From: https://blog.51cto.com/u_16131726/6855236

相关文章

  • 使用fdisk和mkfs.vfat命令重新对U盘进行分区和格式化
    一.参考网址二.实战1.通过命令“ls-l/dev/sd*”,找到需要格式化的U盘对应的设备名为/dev/sdb(注意:这是我的机子上显示的,你的机子上显示可能不一样,千万不能弄错,否则把宿主机给重新分区了,后悔莫及;可以通过插拔U盘的方式,观察设备名称变化,从而确定U盘对应的设备名) 2.输......
  • [爬虫]2.3.1 使用Python操作文件系统
    Python提供了许多内置库来处理文件系统,如os、shutil和pathlib等,这些库可以帮助你创建、删除、读取、写入文件和目录。读取文件在Python中,你可以使用内置的open函数来打开一个文件。open函数返回一个文件对象,你可以对这个对象进行各种操作。以下是一个读取文件的例子:withopen(......
  • 新一代包管理工具 pnpm 使用心得
    最近将几个项目的包管理器都由npm切换为了pnpm,迁移体验非常棒,算得上是个人体验最好的一次工具迁移。以下是使用pnpm的直观感受:体验优良,依赖安装速度极快,占用磁盘空间小。上手简单,绝大部分npm/yarn项目可以低成本完成迁移,官方也有较详尽的中文文档。pnpm组织no......
  • ansible一时脑抽使用file模块操作文件导致远程主机bin目录软连接被更改,系统无法登录
    如题,二者有相同的参数,脑抽执行后就悲剧了,造成多个主机无法远程登录。故障起因:错误操作:使用ansilbe远程往目标主机/bin目录拷贝文件的时候,使用错误模块,本该使用copy模块,而使用了file模块,造成远程主机/bin这个软连接被连接到了不存在的文件,并且权限被设置为了644。影响:造成远程主......
  • .NET 7 使用gRpc
    Server端 添加proto文件,编辑项目文件添加proto文件,编译项目 添加Service服务 启动Server Client端安装package Copy proto文件到项目里   ......
  • C++使用指针进行地址传递及错误示范
    正确示范:voidchange(int*a,int*b){ inttemp=*a; *a=*b; *b=temp;}错误示范:voidchange(int*a,int*b){ int*temp=a; a=b; b=temp;} ......
  • 使用3ds Max粒子系统创建飞天箭雨特效场景
    推荐:NSDT场景编辑器助你快速搭建可二次开发的3D应用场景1.设置箭头步骤1打开 3dsMax。打开3dsMax步骤2我使用多边形建模技术制作了一个简单的箭头,我将在教程中使用。.max您可以从下载部分。箭头.max步骤3将此箭头重命名为静态箭头。静态箭头步骤4复制静态......
  • Vue3 组件篇
    组件命名组件的命名一般分为两种在单文件组件中,推荐为子组件使用PascalCase的标签名,以此来和原生的HTML元素作区分。虽然原生HTML标签名是不区分大小写的,但Vue单文件组件是可以在编译中区分大小写的。我们也可以使用/>来关闭一个标签。使用kebab-case形式并显式地......
  • Linux man 的使用
    前言man命令是Linux下的帮助指令,man更为强大的是,不仅可以查看Linux中命令的使用帮助,还可以查看软件服务配置文件、系统调用、库函数等帮助信息。而man命令也并不是英文单词“man”的意思,它是单词manual的缩写,即使用手册的意思。下面对man手册进行介绍。manman手册页文件存放......
  • Vue中使用Echarts可视化图表
    1、首先在项目中安装Echarts1npminstallecharts2npminstallecharts--save 2、在项目main.js中全局引入1importechartsfrom'echarts'2//挂载到vue原型上3Vue.prototype.$echarts=echarts 1//全局引入echarts2import*asechartsfrom'echar......