高级前端-axios

本文深入探讨了Axios的源码分析,包括如何实现请求API化,建议将API置于视图层之外,以提升代码维护性。通过创建API目录并按业务模块划分,使用模块化方法调用API,如apiModule.user.login()。同时,文章还介绍了Axios的二次封装,以避免重复提交请求,提供具体代码示例参考。
摘要由CSDN通过智能技术生成

Axios源码分析

简单源码实现参考:https://jframesea.coding.net/public/interview/Interview/git/files/master/javascript/axios.js

请求API化

1. api不要出现在视图层,不然的话修改起来会很麻烦

2. 建立一个api目录,然后根据业务模块划分api

3. 使用 module.method的方式实现调用api,例子:apiModule.user.login()、apiModule.sku.getList()

Axios的二次封装,防止重复提交请求

// 这里的server是axios的一个实例,里面加载了基础配置和拦截器
import server from './server'
function MyServer() {
  this.server = server
  this.nowHandle = null
}

MyServer.prototype.v = function (vueDom) {
  this.nowHandle = vueDom
}

MyServer.prototype.parseRouter = function (name, api) {
  this[name] = {}
  Object.keys(api).forEach(apiName => {
    this[name][apiName] = this.sendMsg.bind(this, name, apiName, api[apiName])
    this[name][apiName].state = 'ready'
  })
}

// 开发轮子是为了提供遍历,同时也要提供给使用轮子的人以扩展性
MyServer.prototype.sendMsg = function (moduleName, apiName, url, config) {
  var config = config || {}
  var method = config.method || 'get'
  var data = config.data || {}
  var params = data
  if (method === 'get') {
    params = {
      params: data
    }
  }
  var bindName = config.bindName || apiName
  var self = this
  // 分模块 =》 效果处理,数据处理
  var before = function (msg) {
    // 效果处理
    // 在这里防止多次请求
    self[moduleName][apiName].state = 'ready'
    return msg
  }

  var defaultFn = function (msg) {
    // 默认数据处理
    // 处理nowHndle
    // this.nowHandle[bindName] = msg
    return msg
  }
  var success = config.success || defaultFn
  if (this[moduleName][apiName].state === 'ready') {
    this[moduleName][apiName].state === 'waiting'
    return this.server[method](url, params).then(before)
  }
}

export default new MyServer()

详细代码参考项目:https://jframesea.coding.net/public/merp-app/merp-app/git/files/master/src/request

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值