Vue 中简易封装网络请求(Axios),包含请求拦截器和响应拦截器

Vue 中简易封装网络请求(Axios),包含请求拦截器和响应拦截器

axios简介

Axios 是一个基于 promise 的网络请求库,可以用于浏览器和 node.js

Axios官方中文文档

特性

  • 从浏览器创建 XMLHttpRequests
  • 从 node.js 创建 http 请求
  • 支持 Promise API
  • 拦截请求和响应
  • 转换请求和响应数据
  • 取消请求
  • 超时处理
  • 查询参数序列化支持嵌套项处理
  • 自动将请求体序列化为:
    JSON (application/json)
    Multipart / FormData (multipart/form-data)
    URL encoded form (application/x-www-form-urlencoded)
  • 将 HTML Form 转换成 JSON 进行请求
  • 自动转换JSON数据
  • 获取浏览器和 node.js 的请求进度,并提供额外的信息(速度、剩余时间)
  • 为 node.js 设置带宽限制
  • 兼容符合规范的 FormData 和 Blob(包括 node.js)
  • 客户端支持防御XSRF

安装

复制代码
npm install axios;

示例代码

https.js

javascript 复制代码
import axios from "axios";
// const token = localStorage.getItem("accessToken");

export const https = axios.create({
  baseURL: "http://localhost:3000",
  timeout: 15000,
  headers: {},
});

// 添加请求拦截器
https.interceptors.request.use(
  (config) => {
    // 在发送请求之前做些什么
    // if (token) {
    //   config.headers.accessToken = `Bearer ${token}`;
    // }
    return config;
  },
  (error) => {
    // 对请求错误做些什么
    // console.log(error);
    return Promise.reject(error);
  }
);

// 添加响应拦截器
https.interceptors.response.use(
  (response) => {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    // console.log(response);
    if (response.status === 200) {
      // console.log(Promise.resolve(response));
      return Promise.resolve(response);
    } else {
      return Promise.reject(response);
    }
    // return response;
  },
  (error) => {
    // 超出 2xx 范围的状态码都会触发该函数。
    console.log(error);
    // 对响应错误做点什么
    return Promise.reject(error);
  }
);

在Vue中引入使用

javascript 复制代码
import { https } from "@/api/http";
//GET请求
// 写过的一个分页查询为例
https
  .get("/display", {
    params: {
      pageSize: page.pageSize.value,
      currentPage: page.currentPage.value,
    },
  })
  .then((res) => {
    console.log(res);
  })
  .catch((error) => {
    console.log(error);
  });
  // 另一种写法
 https.get("/display?ID=12345")
  .then((res) => {
    console.log(res);
  })
  .catch((error) => {
    console.log(error);
  });
 
//POST请求
https
  .post("/display", {
  	id: id.value,
  })
  .then((res) => {
    console.log(res);
  })
  .catch((error) => {
    console.log(error);
  });
相关推荐
vx_Biye_Design42 分钟前
expressDeepSeek社团咨询助手的学生社团管理系统60746-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·python·课程设计·express
传人1 小时前
悬停旋转放大和位移效果如何写
前端·javascript·css
vx_Biye_Design1 小时前
springboot宠物领养与救助平台64334-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·mysql·课程设计·宠物
vx_Biye_Design1 小时前
django就业信息推荐系统61953-计算机课程设计、毕业设计
java·vue.js·spring boot·python·架构·django·课程设计
羲云1 小时前
给 Vue 页面加个 Markdown 编辑器:ME.js 的接入、图片粘贴与音视频
javascript·vue.js
zhangzeyuaaa1 小时前
Ruby 方法参数完全指南:默认值、可变参数与关键字参数
前端·python·ruby
粥里有勺糖1 小时前
视野修炼-技术周刊第135期 | 鼠标跟随宠物
前端·github·aigc
粥里有勺糖1 小时前
拿 Codex 协助清理磁盘,Nice!
前端·后端·github
专业程序开发源1 小时前
springboot高校学生社团管理系统74810-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·spring·php·课程设计
Highcharts.js2 小时前
可视化商用图表库对比,如何选择?
前端·javascript·学习·信息可视化·highcharts·前端可视化