Vue3中axios请求封装、请求拦截与相应拦截详解

yizhihongxing

Vue3中axios请求封装、请求拦截与相应拦截详解

Axios是一个基于Promise的HTTP客户端,可以运行在浏览器和node.js中。它端口良好的API,比原生的XHR更加易用和灵活。在Vue3中,我们可以使用axios来发起HTTP请求并将其封装成一个单独的模块,在需要请求数据的组件中调用。

安装与引入

我们可以使用npm来安装axios:

npm install axios

在需要使用axios的Vue组件中引入它:

import axios from 'axios'

封装请求

在将axios封装为一个单独的模块前,我们需要考虑以下几点:

  • 按照RESTful API进行划分和请求方法的封装
  • 在每个请求之前添加一个请求拦截器
  • 在每个请求完成之后添加一个响应拦截器

下面我们来编写一个API模块,用来处理所有针对某个API的HTTP请求:

import axios from 'axios';

export default {
  // 获取所有文章
  getArticles() {
    return axios.get('/api/articles');
  },

  // 创建新文章
  createArticle(data) {
    return axios.post('/api/articles', data);
  },

  // 获取单个文章
  getArticle(id) {
    return axios.get(`/api/articles/${id}`);
  },

  // 更新单个文章
  updateArticle(id, data) {
    return axios.patch(`/api/articles/${id}`, data);
  },

  // 删除单个文章
  deleteArticle(id) {
    return axios.delete(`/api/articles/${id}`);
  }
}

在这个模块中,我们将每个API请求方法进行了封装,并按照RESTful API的规范进行划分。

请求拦截器

在每个请求之前,我们要添加一个请求拦截器。这个拦截器可以用于在发送请求之前进行一些操作,例如在请求头中添加token:

import axios from 'axios';
import store from '@/store';

const api = axios.create({
  baseURL: 'http://localhost:3000',
  headers: { 'Content-Type': 'application/json' }
});

api.interceptors.request.use(
  (config) => {
    const token = store.getters['auth/token'];

    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }

    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

export default api;

在这个例子中,我们通过store来获取我们的token,并将其添加到请求头中。

响应拦截器

在每个请求完成之后,我们要添加一个响应拦截器。这个拦截器可以用于在接收到响应之后进行一些操作,例如在收到401错误码的响应时,跳转到登录页面:

import axios from 'axios';
import router from '@/router';

const api = axios.create({
  baseURL: 'http://localhost:3000',
  headers: { 'Content-Type': 'application/json' }
});

api.interceptors.response.use(
  (response) => {
    return response;
  },
  (error) => {
    if (error.response.status === 401) {
      router.push({ name: 'Login' });
    }

    return Promise.reject(error);
  }
);

export default api;

在这个例子中,我们判断了返回的错误码是否为401,如果是的话就跳转到登录页面。

示例

下面是一个在Vue3中使用修改文章的示例:

import api from '@/api';

export default {
  name: 'Article',
  data() {
    return {
      article: {},
      title: '',
      content: ''
    };
  },
  methods: {
    updateArticle() {
      const data = {
        title: this.title,
        content: this.content
      };

      api.updateArticle(this.article.id, data)
        .then(() => this.$router.push({ name: 'ArticleList' }));
    }
  },
  created() {
    api.getArticle(this.$route.params.id)
      .then((response) => this.article = response.data);
  }
};

在这个组件中,我们使用了getArticle方法来获取文章的信息,然后将其存储在组件的data对象中。当我们需要更新文章时,我们调用updateArticle方法,并给它传递新的文章标题和内容,然后在成功响应之后,使用router实例来导航回文章列表页面。

总结

现在你应该了解如何在Vue3中使用axios来封装HTTP请求,并在每个请求之前添加请求拦截器,在每个请求完成之后添加响应拦截器。在实践中,请确保按照RESTful API的规范进行请求方法的划分,这样可以使整个API更加易于维护,而且更加直观。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue3中axios请求封装、请求拦截与相应拦截详解 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • thinkjs+swagger Editor

    ThinkJS+Swagger Editor的完整攻略 本文将为您详细讲解如何使用ThinkJS和Swagger Editor进行API接口的开发和文档编写,包括ThinkJS和Swagger Editor的安装、使用、常见问题及解决方法等内容。 ThinkJS的安装和使用 ThinkJS是一款基于Node.js的Web框架,可以通过以下步骤进行安装和使用:…

    other 2023年5月6日
    00
  • vue 实现上传组件

    当我们需要在 Vue 项目中添加文件上传功能时,我们可以使用 vue 组件来实现。下面是实现上传组件的基本流程: 1. 安装依赖 首先,你需要在你的项目中安装以下依赖: npm install vue axios element-ui –save Vue: 一个用于构建用户界面的渐进式框架。 Axios: 一个基于 Promise 的 HTTP 库,用于向…

    other 2023年6月27日
    00
  • SuperSocket入门–Telnet服务器和客户端请求处理

    SuperSocket是一个跨平台的.NET Socket服务器框架,用于快速构建高性能,可扩展和可靠的TCP,UDP和WebSocket服务器。本文将详细讲解如何使用SuperSocket来构建一个基于Telnet协议的服务器,并处理客户端的请求。 准备工作 在开始构建Telnet服务器之前,需要安装SuperSocket的NuGet包。可以使用Visua…

    other 2023年6月27日
    00
  • Android实现自定义圆形进度条

    下面是“Android实现自定义圆形进度条”的完整攻略。 1.准备工作 在开始实现自定义圆形进度条之前,我们需要进行一些准备工作: 添加依赖库 我们需要在项目的build.gradle文件中添加自定义View的依赖库。 dependencies { implementation ‘com.android.support:appcompat-v7:26.1.0…

    other 2023年6月25日
    00
  • C语言实现斐波那契数列(非递归)的实例讲解

    C语言实现斐波那契数列(非递归)的实例讲解 什么是斐波那契数列 斐波那契数列是指这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列是以递归的方式定义:F(0) = 0,F(1) = 1,F(n) = F(n-1) + F(n-2) (n>=2,n∈N*),用文字来说,就是斐波那契数列列由0和1开始,之后的斐波那契数就…

    other 2023年6月27日
    00
  • Thinkphp中import的几个用法详细介绍

    关于ThinkPHP中import的用法,我会为您提供详细的介绍和示例说明。 import的作用 在ThinkPHP中,import是一个很有用的函数,它可以完成自动加载类、接口和命名空间。通过使用import可以: 自动加载类和接口; 导入命名空间下的类或函数; 避免使用长字符串描述类地址。 import的用法 自动加载类和接口 在使用ThinkPHP时,…

    other 2023年6月27日
    00
  • 重启U盘的简便技巧不需要拔下重插

    以下是“重启U盘的简便技巧不需要拔下重插”的完整攻略: 标题 问题背景 在使用电脑时,我们常常需要使用U盘来传输和存储数据。但是,当我们需要重启电脑时,往往需要拔下U盘,然后再插回电脑才能继续使用。这样的操作很不方便,有没有什么办法可以快速重启U盘而不用拔下重插呢? 解决方法 其实,我们可以通过一些简单的操作来快速重启U盘。下面是具体步骤: 打开“设备管理器…

    other 2023年6月27日
    00
  • js实现图片懒加载效果

    图片懒加载效果是指当用户滚动页面时,只有当图片进入浏览器可视区域内时才进行图片加载,以提升网站的加载速度和用户的体验。以下是实现图片懒加载效果的完整攻略: 1. 设置图片占位符 在HTML中,为需要进行懒加载的图片设置占位符,通常可以使用下面两种方式: 直接在img标签中设置占位符,例如:<img src=”placeholder.png” data-…

    other 2023年6月25日
    00
合作推广
合作推广
分享本页
返回顶部