当前位置:   article > 正文

关于Vue项目中对axios进行二次封装_axios 封装添加固定参数

axios 封装添加固定参数

封装axios函数功能:

1、复用请求地址:公共请求地址就不用重复定义。

2、自动携带公共的请求参数。

3、函数调用返回的promise对象内部的结果值

        如果是成功对象,直接得到data数据

        如果是失败状态,直接得到失败原因

项目中常用场景:可以统一处理错误请求,请求头自动携带token、处理返回的响应数据、设置进度条等,代码如下:

  1. import axios from "axios";
  2. import NProgress from "nprogress";
  3. import "nprogress/nprogress.css";
  4. import getUserTempId from "./getUserTempId";
  5. import store from "@/store";
  6. // axios.create方法的返回值,简单理解axios的实例,功能和axios基本一致
  7. const request = axios.create({
  8. // 请求基础路径,所有通过request发送请求,请求地址前面都会自动加上baseURL
  9. baseURL: "/api",
  10. // 请求的超时时间,超过时间请求会自动中断,请求失败
  11. timeout: 20000,
  12. // 公共请求头(固定写死)
  13. // headers: {},
  14. });
  15. /*
  16. 请求拦截器: 在发送请求之前触发的函数
  17. 响应拦截器:在响应回来的时候触发的函数
  18. 触发流程:
  19. request({ method: 'xx', url: 'xxx' })
  20. .then()
  21. .catch()
  22. 请求拦截器的回调
  23. 一般只会触发成功的回调
  24. 发送请求
  25. 响应拦截器的回调
  26. 看响应状态码
  27. 2xx触发成功的回调函数
  28. 非2xx触发失败的回调函数
  29. then/catch/的回调 / async await
  30. */
  31. // 请求拦截器
  32. request.interceptors.request.use(
  33. // 成功的回调函数
  34. (config) => {
  35. // config请求的配置对象
  36. NProgress.start();
  37. // 给config添加公共参数(动态的)
  38. config.headers.userTempId = getUserTempId();
  39. // this.$store.state.xxx
  40. const token = store.state.user.token;
  41. if (token) {
  42. config.headers.token = token;
  43. }
  44. // 必须返回config对象
  45. // 返回的config对象,就会在下一步发送请求用上
  46. return config;
  47. }
  48. // 失败的回调函数
  49. // () => {}
  50. );
  51. // 响应拦截器
  52. request.interceptors.response.use(
  53. // 成功的回调函数
  54. (response) => {
  55. // 请求成功 2xx
  56. NProgress.done();
  57. // 功能可能是失败
  58. if (response.data.code === 200) {
  59. // 功能成功
  60. return response.data.data;
  61. } else {
  62. // 功能失败
  63. return Promise.reject(response.data.message || "未知错误,请联系网管");
  64. }
  65. },
  66. // 失败的回调函数
  67. (error) => {
  68. NProgress.done();
  69. console.dir(error);
  70. // 请求失败
  71. return Promise.reject(error.message);
  72. }
  73. );
  74. export default request;

最后api里直接引入封装好的request即可

  1. // 登录
  2. export const reqLogin = (phone, password) => {
  3. return request({
  4. method: "POST",
  5. url: `/user/login`,
  6. data: {
  7. phone,
  8. password,
  9. },
  10. });
  11. };

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/285612
推荐阅读
相关标签
  

闽ICP备14008679号