封装接口请求

本文介绍了如何在项目中对axios接口进行封装,包括创建axios实例、设置请求和响应拦截器,以及在拦截器中进行错误处理和数据预处理。通过一个登录接口的调用来展示封装后的使用方式,并讨论了跨域问题的解决方案。同时,文章探讨了在拦截器中可以进行的操作,如请求前的token验证和响应后的错误提示。
摘要由CSDN通过智能技术生成

在做项目的时候,我们平常会对接口api进行一些封装。今天来教给大家一些简单的封装接口的方法。

一.request.js文件夹

通常情况下我们会在utils/request.js封装自己的api。

// 1.导入axios
import axios from "axios";
// 2.创建axios副本
const _axios = axios.create({
  baseURL: process.env.VUE_APP_BASE_API,
});
// 3.请求拦截器
_axios.interceptors.request.use(
  (config) => {
    return config;
  },
  (error) => {
    console.log(error, "请求失败之后的结果");
    return Promise.reject(error);
  }
);
// 4.响应拦截器
_axios.interceptors.response.use(
  (res) => {
    if (res.data.success) {
      return res.data;
    } else {
      // 错误的提示信息
      return Promise.reject(res.data.message);
    }
  },
  (error) => {
    // return Promise.reject(error);
    return error, "响应失败的结果";
  }
);
// 5.暴露出去
export default _axios;

分析步骤:

1.导入了axios

2.深拷贝了一份,并且能够配置基地址

后面了两个拦截器我要重点进行剖析了。

拦截器是固定的写法。

3.然后暴露出去。

二.测试接口,如果要调用一个登录的接口

import request from "./request";
// 登录
export function sysLogin(data) {
  return request({
    url: "/sys/login",
    method: "POST",
    data,
  });
}

分析步骤:

导入配置好的api文件

然后配置好信息

如请求的地址:

请求的方法:

请求的参数:

三.遇到跨域的问题

这是一个老生常谈的问题,在以前的文章也有讲过,跨域的问题是如何解决的。

 

四.开始调用接口

代码:

<template>
  <div class="">
    <form>
      账号: <input type="text" v-model="from.mobile" /> 密码:<input
        type="password"
        v-model="from.password"
      />
    </form>
    <button @click="fn">点击登录</button>
  </div>
</template>

<script>
import { sysLogin } from "./api/login";
export default {
  data() {
    return {
      from: {
        mobile: "13800000002",
        password: "123456",
      },
    };
  },
  created() {
    alert(process.env.VUE_APP_BASE_API, "我是基地址");
  },
  name: "",
  methods: {
    async fn() {
      const res = await sysLogin(this.from);
      console.log(res);
    },
  },
};
</script>

<style scoped>
button {
  width: 200px;
  height: 30px;
  background-color: pink;
  margin: 300px auto;
}
</style>

解析:既然是默认导出的,那么肯定是要默认导入,千万要加上{},名字也不要随便更改,如果要更改需要加上as关键字后面接上自己要更改的名字。

好了,那么我们愉快地来调用接口吧

这样我们就成功地调用了一个接口了。

在阐述拦截器之间,分析一下一个请求的过程。

也就是请求还没到服务器的时候会进行一次拦截。

数据还没到客户端的时候又会进行一次拦截。

那么我们可以做一些响应的操作。

五.可以在拦截器里面进行的操作

还是上面封装的api不做任何改变。

请求拦截:

_axios.interceptors.request.use(
  (config) => {
    console.log(config, "请求之前的一些东西");
    return config;
  },
  (error) => {
  // 对请求错误做些什么
    return Promise.reject(error);
  }
);

点击按钮打印config这个参数的结果是:

可以看出这里里面包含了请求的信息。我们可以做一些操作。

在发送请求之前携带token。判断toekn是否过期。

响应拦截:

_axios.interceptors.response.use(
  (res) => {
    console.log(res, "响应之前的一些东西");
    if (res.data.success) {
      return res.data;
    } else {
      return Promise.reject(res.data.message);
    }
  },
  (error) => {
    //对响应错误做什么
    return Promise.reject(error);
  }
);

res,就是响应回来的一些数据,我们可以做一些判断,如果成功就进行一层解析以res.data的形式传递过去,如果失败就错一个失败的统一错误处理。

然后分析一下两个错误

在请求之前会携带东西,如果出现错误也要给用户一些相应的提示信息。

例如

代码:

_axios.interceptors.response.use(
  (res) => {
    alert("响应成功");
    if (res.data.success) {
      return res.data;
    } else {
      return Promise.reject(res.data.message);
    }
  },
  (error) => {
    // 响应失败的提示语
    return alert(error);
  }
);

 

这是响应错误给出的提示。

请求错误也应该给出一定的提示。

总结:

在发送一个请求的时候,具体的流程

在uniapp中封装接口请求通常是使用Promise和async/await来实现。你可以按照以下步骤进行操作: 1. 首先,创建一个全局请求封装的文件,比如`request.js`,并将其导入到你的项目中。在这个文件中,你可以定义一个`base_url`作为接口的基础地址,并根据实际情况修改请求头和token。你可以使用uniapp的`uni.request`方法来发送请求,并在请求成功后通过Promise的resolve方法返回结果,失败则通过reject方法抛出异常。代码如下所示: 2. 接着,在另一个文件`index.js`中,你可以导入`request.js`并定义一个对象,以封装不同接口请求方法。每个请求方法都可以调用`request`方法来发送请求。代码如下所示: 3. 最后,在需要使用接口请求的地方,你可以直接导入`index.js`文件,然后调用定义好的请求方法来发送接口请求。你可以使用async/await的形式来写代码,以避免回调地狱。例如,你可以调用`GetPhone`方法来获取手机号。代码如下所示: 通过以上步骤,你可以在uniapp中封装接口请求,并且使用Promise和async/await的形式来写代码,从而提高代码的可读性和维护性。 参考资料: : uniapp 请求方式嵌套一层Promise用async和await的形式去写代码,错误请求统一处理,类同步方式写代码告别回调地狱。 : http/request.js : http/index.js<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [uniapp-request.zip-Promise方式封装uniapp请求](https://download.csdn.net/download/star7783620/12549480)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【uniapp】封装请求](https://blog.csdn.net/Qxn530/article/details/127301367)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值