关于chatGPT为我封装vue axios

690 阅读2分钟

最近chatGPT的热门,让我这个前端新手终于有了,免费的老师

QQ图片20221209021020.gif

最近在axios的封装上,挺头疼,跟着掘金上一些文章封装,接口多了,发现特别难管理。 在这些封装文章的评论里,有部分人觉得实在过渡封装。到底啥事不过都封装,于是我让chatGPT帮我封装了一个。

以下是chatGPT的回答过程

能帮我写个在vue3单页面选项式项目中封装带接口管理的axios吗

当然,我很乐意帮您写一个在 Vue 3 单页面项目中封装带接口管理的 axios 的示例。

首先,安装 axios:

npm install axios

然后,在项目的某个文件中,比如 src/api/index.js,创建一个 axios 实例并对其进行配置:

import axios from 'axios';

const instance = axios.create({
  baseURL: 'http://api.example.com',
  timeout: 1000,
});

// 添加请求拦截器
instance.interceptors.request.use(
  config => {
    // 在发送请求之前做些什么
    return config;
  },
  error => {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

// 添加响应拦截器
instance.interceptors.response.use(
  response => {
    // 对响应数据做点什么
    return response;
  },
  error => {
    // 对响应错误做点什么
    return Promise.reject(error);
  }
);

export default instance;

然后,创建一个接口管理模块,比如 src/api/interface.js,用来存放所有的接口定义:

import axios from './index';

const API_BASE_URL = '/api';

const apis = {
  getData: {
    url: `${API_BASE_URL}/getData`,
    method: 'get',
  },
  createData: {
    url: `${API_BASE_URL}/createData`,
    method: 'post',
  },
  updateData: {
    url: `${API_BASE_URL}/updateData/:id`,
    method: 'put',
  },
  deleteData: {
    url: `${API_BASE_URL}/deleteData/:id`,
    method: 'delete',
  },
};

接着,在 src/api/interface.js 文件中添加代码,用来处理 API 调用的细节:

const createApi = api => (params, data) => {
  let url = api.url;
  let options = {
    method: api.method,
  };

  if (params) {
    Object.keys(params).forEach(key => {
      url = url.replace(`:${key}`, params[key]);
    });
  }

  if (data) {
    options.data = data;
  }

  return axios(url, options);
};

const api = {};
Object.keys(apis).forEach(key => {
  api[key] = createApi(apis[key]);
});

export default api;

最后,在项目的其它文件中,比如 src/components/SomeComponent.vue,就可以使用这个封装好的接口管理模块来发送请求了:

import api from '../api/interface';

export default {
  name: 'SomeComponent',
  data() {
    return {
      responseData: null,
    };
  },
  methods: {
    async fetchData() {
      try {
        const response = await api.getData({ id: 123 });
        this.responseData = response.data;
      } catch (error) {
        // 对请求失败做点什么
        console.error(error);
      }
    },
  },
};

希望这个示例能够帮助您理解如何在 Vue 3 单页项目中封装带接口管理的 axios。 下面是我的提问图

image.png

QQ图片20221209021020.gif 怎么样,各位掘金大佬。这代码生成的有技术水准吗