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

打印 上一主题 下一主题

主题 769|帖子 769|积分 2307

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
安装

  1. npm install axios;
复制代码
示例代码

https.js
  1. import axios from "axios";
  2. // const token = localStorage.getItem("accessToken");
  3. export const https = axios.create({
  4.   baseURL: "http://localhost:3000",
  5.   timeout: 15000,
  6.   headers: {},
  7. });
  8. // 添加请求拦截器
  9. https.interceptors.request.use(
  10.   (config) => {
  11.     // 在发送请求之前做些什么
  12.     // if (token) {
  13.     //   config.headers.accessToken = `Bearer ${token}`;
  14.     // }
  15.     return config;
  16.   },
  17.   (error) => {
  18.     // 对请求错误做些什么
  19.     // console.log(error);
  20.     return Promise.reject(error);
  21.   }
  22. );
  23. // 添加响应拦截器
  24. https.interceptors.response.use(
  25.   (response) => {
  26.     // 2xx 范围内的状态码都会触发该函数。
  27.     // 对响应数据做点什么
  28.     // console.log(response);
  29.     if (response.status === 200) {
  30.       // console.log(Promise.resolve(response));
  31.       return Promise.resolve(response);
  32.     } else {
  33.       return Promise.reject(response);
  34.     }
  35.     // return response;
  36.   },
  37.   (error) => {
  38.     // 超出 2xx 范围的状态码都会触发该函数。
  39.     console.log(error);
  40.     // 对响应错误做点什么
  41.     return Promise.reject(error);
  42.   }
  43. );
复制代码
在Vue中引入使用

  1. import { https } from "@/api/http";
  2. //GET请求
  3. // 写过的一个分页查询为例
  4. https
  5.   .get("/display", {
  6.     params: {
  7.       pageSize: page.pageSize.value,
  8.       currentPage: page.currentPage.value,
  9.     },
  10.   })
  11.   .then((res) => {
  12.     console.log(res);
  13.   })
  14.   .catch((error) => {
  15.     console.log(error);
  16.   });
  17.   // 另一种写法
  18. https.get("/display?ID=12345")
  19.   .then((res) => {
  20.     console.log(res);
  21.   })
  22.   .catch((error) => {
  23.     console.log(error);
  24.   });
  25. //POST请求
  26. https
  27.   .post("/display", {
  28.           id: id.value,
  29.   })
  30.   .then((res) => {
  31.     console.log(res);
  32.   })
  33.   .catch((error) => {
  34.     console.log(error);
  35.   });
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

tsx81428

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表