封装一个axios request请求的(通用)方法

该文介绍了如何组织和配置一个基于Axios的HTTP请求库,包括创建services文件夹、配置API常量、设置请求和响应拦截器,以及按模块创建请求调用的方法。文中还涉及到错误处理和AntDesignVue的message组件。
摘要由CSDN通过智能技术生成

如果可以实现记得点赞分享,谢谢老铁~

1.首先创建一个services 文件夹

里面新建一个命名为app.ts的文件;创建一个config文件夹,里面创建一个api.ts;再按模块划分创建业务文件夹 testModule ,里面创建一个index.ts. 如图:
在这里插入图片描述

2.然后再api.ts里面配置一些常规的常量
let BASE_URL = "/api";
const TIME_OUT = 20000;
// if (
//   location.host.toLowerCase().indexOf("localhost") !== -1 ||
//   location.host.toLowerCase().indexOf("127.0.0.1") !== -1
// ) {
//   BASE_URL = "/";
// } else {
//   BASE_URL = location.origin.toLowerCase() + "/";
// }
const METHOD = {
  GET: "GET",
  POST: "POST",
  PUT: "PUT",
  DELETE: "DELETE",
};

export { BASE_URL, TIME_OUT, METHOD };
3.在app.ts写关于请求的相关配置及拦截操作
import axios from "axios";
import { METHOD, BASE_URL, TIME_OUT } from "./config/api";
import { message } from "ant-design-vue";

const codeMessage: any = {
  200: "服务器成功返回请求的数据。",
  201: "新建或修改数据成功。",
  202: "一个请求已经进入后台排队(异步任务)。",
  204: "删除数据成功。",
  400: "发出的请求有错误,服务器没有进行新建或修改数据的操作。",
  401: "用户没有权限(令牌、用户名、密码错误)。",
  403: "用户得到授权,但是访问是被禁止的。",
  404: "发出的请求针对的是不存在的记录,服务器没有进行操作。",
  406: "请求的格式不可得。",
  410: "请求的资源被永久删除,且不会再得到的。",
  422: "当创建一个对象时,发生一个验证错误。",
  500: "服务器发生错误,请检查服务器。",
  502: "网关错误。",
  503: "服务不可用,服务器暂时过载或维护。",
  504: "网关超时。",
  999: "请重新登陆",
};

const instance = axios.create({
  baseURL: BASE_URL,
  timeout: TIME_OUT,
});

// let loading = null;
// 添加请求拦截器
instance.interceptors.request.use(
  function (config) {
    return config;
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

// 添加响应拦截器
instance.interceptors.response.use(
  async function (response: any) {
    if (response.status !== 200) {
      message.error(codeMessage[response.status]);
      return;
    }
    if (!response?.data.data) {
        message.error(response?.data.message || "服务器异常,请稍后再试");
        return;
    }
    return response?.data;
  },
  function (error) {
    // 对响应错误做点什么
    message.error(
      codeMessage[error?.response?.status] || "服务器异常,请稍后再试"
    );
    return Promise.reject(error);
  }
);

function GET(url: string, params: any, arg: any) {
  return instance.get(url, { params, ...arg });
}
function POST(url: string, params: any) {
  return instance.post(url, params);
}
function PUT(url: string, params: any) {
  return instance.put(url, params);
}
function DELETE(url: string, params: any) {
  return instance.delete(url, params);
}

/**
 *
 * @param url   请求地址
 * @param parmas  请求参数
 * @returns
 */
const request = (url: string, parmas: any) => {
  switch (parmas.method) {
    case METHOD.GET:
      return GET(url, parmas.data, parmas);
    case METHOD.POST:
      return POST(url, parmas.data);
    case METHOD.PUT:
      return PUT(url, parmas.data);
    case METHOD.DELETE:
      return DELETE(url, parmas.data);
  }
};
export default request;

4.最后自己按模块创建请求调用
import request from "../app";
interface props {
  keyword: string;
}
export async function getLawList(params: props): Promise<any> {
  return request("/xxx/getList", {
    method: "POST",
    data: params,
  });
}
export async function getCaseById(params: detailProps): Promise<any> {
  return request("/xxx/getById", {
    method: "GET",
    data: params,
  });
}
### 回答1: 好的,我可以为您提供一些关于如何在 Vue 中封装 axios 的信息。 首先,需要安装 axios 库,在终端中运行下面的命令: ``` npm install axios ``` 然后,在 Vue 项目中创建一个文件夹,例如 `api`,在该文件夹中创建一个 `index.js` 文件,在该文件中引入 axios 库,并封装一些 axios 请求方法。 例如: ``` import axios from 'axios' const baseURL = 'https://api.example.com' export const fetchData = (params) => { return axios.get(baseURL, { params }) } export const postData = (data) => { return axios.post(baseURL, data) } ``` 然后,在 Vue 组件中,可以通过导入封装axios 方法来发起请求。 例如: ``` import { fetchData, postData } from './api' export default { methods: { async getData () { try { const res = await fetchData() console.log(res) } catch (error) { console.log(error) } }, async sendData () { try { const res = await postData({ name: 'John', age: 20 }) console.log(res) } catch (error) { console.log(error) } } } } ``` 这样,就可以在 Vue 组件中使用封装axios 请求方法了。 希望这些信息能对您有所帮助。 ### 回答2: Vue是一种用于构建用户界面的渐进式JavaScript框架,而axios一个流行的基于Promise的HTTP客户端工具,用于进行浏览器和Node.js中的HTTP通信。为了更好地在Vue项目中使用axios,我们可以封装一个axios,以便在整个应用程序中使用。 封装一个axios可以有如下步骤: 1. 首先,在项目中安装axios,可以使用npm或yarn命令进行安装:`npm install axios`或`yarn add axios`。 2. 在项目中创建一个新的文件,例如`http.js`作为我们封装axios文件。 3. 在`http.js`文件中引入axios:`import axios from 'axios'`。 4. 创建一个axios实例,并进行一些全局配置,例如设置请求的基准URL、请求超时时间等。我们可以通过创建一个新的axios实例来分别配置不同的请求,例如:`const instance = axios.create({ baseURL: 'http://api.example.com', timeout: 5000 })`。 5. 可以在实例中添加拦截器来对请求进行处理,例如添加请求拦截器可以在每个请求之前添加一些通用的处理逻辑,例如在请求头中添加Token:``` instance.interceptors.request.use(config => { config.headers.Authorization = 'Bearer ' + getToken(); return config; }, error => { return Promise.reject(error); }); ``` 6. 同样,可以在实例中添加响应拦截器来对响应进行处理。例如,可以在响应错误时进行统一的错误处理:``` instance.interceptors.response.use(response => { return response.data; }, error => { return Promise.reject(error); }); ``` 7. 最后,将我们封装好的axios实例导出,以便在项目中的其他地方使用:`export default instance`。 通过封装一个axios,我们可以将一些通用的配置和逻辑封装在一起,使得在项目中使用axios变得更加方便和可维护。可以在需要发送HTTP请求的地方直接引入并使用我们封装axios实例,从而提高代码的重用性和可读性。 ### 回答3: Vue是一种流行的前端开发框架,而axios是一种基于Promise的HTTP请求库。在Vue中封装一个axios可以帮助我们更好地管理和处理HTTP请求。下面是一个简单的例子: 首先,在Vue项目中创建一个名为`api.js`的文件用于封装axios。 ```javascript // 引入axios import axios from 'axios'; // 创建一个axios实例 const instance = axios.create({ baseURL: 'https://api.example.com', // 设置基本的API URL timeout: 5000 // 设置请求超时时间 }); // 请求拦截器 instance.interceptors.request.use(config => { // 在请求发送之前可以进行一些处理,如添加请求头等 return config; }, error => { // 处理请求错误 return Promise.reject(error); }); // 响应拦截器 instance.interceptors.response.use(response => { // 对响应数据进行一些处理 return response.data; }, error => { // 处理响应错误 return Promise.reject(error); }); // 封装请求方法 export default { // GET请求 get(url, params) { return instance.get(url, { params }); }, // POST请求 post(url, data) { return instance.post(url, data); }, // PUT请求 put(url, data) { return instance.put(url, data); }, // DELETE请求 delete(url) { return instance.delete(url); } }; ``` 然后,在需要使用axios的地方,可以按照如下方式引入并调用: ```javascript import api from './api.js'; api.get('/users').then(response => { console.log(response); }).catch(error => { console.error(error); }); ``` 这样,我们就成功地封装一个axios实例,并且可以通过简单的调用来发送GET、POST、PUT和DELETE请求,并对请求进行拦截和响应处理。这样的封装可以提高代码的可维护性和复用性,更好地管理和处理HTTP请求
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端加油站

你遇到的坑将由我来踩

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值