axios

在日常开发中,ajax请求是必不可少的。

本章目标

针对以上场景二次封装,减少代码量,并优化用户体验。 例:

// 新增或编辑数据时
// 验证表单
form.validate((valid: any) => {
    if (valid) {
        // 提交数据的ajax函数
        submitFun(params).then((res: any) => {
            // 业务成功后逻辑
        })
    }
});

// 登录时
// 验证表单
form.validate((valid: any) => {
    if (valid) {
        // 提交数据的ajax函数
        submitFun(params).then((res: any) => {
            // 业务成功后逻辑
            // 登录成功后逻辑
        }).catch(() => {
            // 业务失败后逻辑
            // 刷新验证码等逻辑
        });
    }
});

具体实现

加载遮罩

在实际交互中,请求数据时为了避免频繁请求和提升用户体验,我们会在请求时加一个遮罩。 在这里我们基于element-ui的Loading组件封装一个遮罩类

基于axios和element-ui的Message组件,以及遮罩类封装request类

鉴权

前后端分离开发是现在主流开发模式,那么用户登录后在每次请求时都需要先后端提交token进行鉴权 在这里我们通过cookie保存token信息,这里先封装一个cookie类

在这里我们可以再次封装request类

常用请求封装

模拟请求

在实际开发过程中,可能会存在开发时后端并未介入的情况,我们可以在request类新增一个模拟异步方法。这样只需要和后端预定好数据格式和字段名称即可开发,减少不必要的等待时间。

如果以业务逻辑来区分ajax请求,一般分为一下几种

  1. 发起请求后,业务成功才执行后续动作,可能会有提示信息。业务失败一般都会有提示信息。多用于数据的增删改查.

  2. 发起请求后,业务失败和成功分别有不同的后续业务动作,一般都会有提示信息。多用于业务流处理,登录等场景。

    针对以上场景,我们可以先封装一个基类方法,这个方法用来处理后端返回的数据,业务失败和成功分别走不同的逻辑,在使用时我们只需要通过then()与catch()来区分即可

    在这个基础方法中我们对后端数据进行了处理,并针对常用场景进行了配置化处理,但是这个方法并不推荐直接使用,我们需要针对这个方法再次扩展一个针对场景2的方法

    对于场景1,我们可以在场景2的基础上二次封装,一般来说可以分为get、post两个方法

另外你也可以根据业务需求再次封装一些常用场景,例:

使用

假如我们有一个系统模块,针对不同接口我们可以这样定义,例:

通过封装request类,我们可以做到用最少的代码来应对最多变的后端🐶

结语

  1. 本文主要针对pc端场景进行了封装,那么移动端应该如何封装呢?

  2. 本文对每个请求都做了自动遮罩处理,那么是否存在不需要自动遮罩的场景,这种需求如何处理?

  3. 上一章我们讲了数据代理如何实现,那么在实际场景中,本章内容如何与数据代理结合使用?

  4. 假如后端返回的数据格式五花八门,格式不统一,如何处理?

最后更新于

这有帮助吗?