iaxios
使用axios库发送请求,并封装多组灵活的、高效的工具插件和配置规约
核心功能
- 使用axios库发送网络请求
- 使用Promise API
- 热插拔多组插件,包括:
- 发送前认证用户
- 发送前验证参数
- 请求完成后convert response
- 可使用jsonp方式发送请求
- formatUrl功能
- 可注册插件(暂未开放)
- 取消发送请求
待完善/添加的功能
- 更方便的区分
request error
,checkResult reject
,feature reject
- 传给回调函数的参数丰富些
- 向外暴露类似生命周期的钩子函数
安装
npm i iaxios -S
使用
//api-index.js;iaxiosoptions requestConfigList: "user.list": url: 'http://xxx.com/user/list' method: 'get' auth: true jsonp: false "user.detail": url: 'http://xxx.com/user/{id}' method: 'get' auth: true jsonp: false features: auth: enabled: true { return !!localStorage; } { ; locationhref = "/user/login"; } ; //user-api.js;var getList = iaxios;var getModel = iaxios; //page1.js(已登录);UserApi //page2.js(未登录);//发送前会检查登录情况,并弹出alert、跳转到登录页UserApi //page3.js(已登录);//假定请求发送需要10s后返回结果var promise = UserApi; //2s后取消发送
API
createRequest (requestName, otherOptions)
- 创建并
返回一个函数
,这个函数用于发送请求; - 返回的函数API及描述:
- 结构:
fun(data, sendOptions)
- 发送前按照优先级合并配置(
mergeOptions
):sendOptions
,otherOptions
,options.requestConfigList[requestName]
,defaultOptions
(由高到低) data
参数是请求要发送的数据- 如果
mergeOptions.method
的值为get
,则会将data
传递给axios
的parmas
配置项 - 如果
mergeOptions.method
的值为post
,则会将data
传递给axios
的data
配置项
- 如果
sendOptions
允许你在发送前最后一次传递配置对象- 函数执行后返回一个
promise
对象- 本
promise
对象保函一个cancel
方法,调用后可取消请求的发送 - 请求发送取消后将会
reject
promise
- 本
- 函数执行后即开始
前置步骤
:检查用户认证、验证参数等功能- 如果前置步骤
不通过
,直接reject
掉promise
,并且会将执行的结果发送给mergeOptions.handlers.rejectConvert
进行处理,将处理结束后的数据传递给reject
函数; - 如果前置步骤
通过
,则会执行发送请求
- 如果前置步骤
- 发送请求前还会执行
mergeOptions.handlers.getUrl
函数,获取请求的url;如果不配置此项,则会从mergeOptions.axios.url
读取 - 请求发送成功后,执行
mergeOptions.handlers.checkResult
函数判断请求结果- 如果
mergeOptions.handlers.checkResult()==true || mergeOptions.handlers.checkResult().then
后调用mergeOptions.handlers.resolveConvert
处理请求成功的response
对象,mergeOptions.handlers.resolveConvert
执行后,resolve
掉promise
,并将处理结果传递给resolve
函数 - 如果
mergeOptions.handlers.checkResult()==false || mergeOptions.handlers.checkResult().catch
后调用mergeOptions.handlers.rejectConvert
处理请求成功的response
对象,mergeOptions.handlers.rejectConvert
执行后,reject
掉promise
,并将处理结果传递给reject
函数
- 如果
- 请求发送失败,执行
mergeOptions.handlers.rejectConvert
,后续步骤类似
- 结构:
setOptions (options)
- 设置当前
iaxios
实例的配置对象
create (options)
- 创建一个
iaxios
实例,并传递配置对象 - 不同实例共享
iaxios
的defaultOptions
,但使用实例方法setOptions
后,设置的是本身的配置
iaxios实例方法
- #createRequest
- #setOptions
Options
//options描述及默认配置 requestConfigList: {} //request配置元信息集合 axios: //axios配置 method: 'get' paramsSerializer: utilparamsSerializer headers: common: 'Content-Type': 'application/json' post: 'Content-Type': 'application/x-www-form-urlencoded' transformRequest: { return util; } validators: {} //验证器列表 features: //启用iaxios的哪些功能? auth: enabled: false formatUrl: enabled: true removeFormatedItem: true /* 格式化后,是否移除已经用到的格式化项 支持4中值: true:移除所有 false:保留所有 ['item1','item2']:移除'item1'和'item2' {item1:true,item2:false}:移除'item1',保留'item2' */ //格式化url jsonp: enabled: false callback: 'callback' link: null // 怎样连接params和data? //接口是否以jsonp方式发送 validator: enabled: false //启用验证器,调用iaxios.createRequest()返回的方法时,先取request配置中的验证器去验证参数,验证通过才会执行下面的逻辑 handlers: //获取请求的真实url { return requestConfigurl; } //检查请求返回的结果,成功请resolve,失败请reject { return res && resdata ? true : false; } //格式化请求成功的数据 { return resdata; } //格式化请求失败的数据 { return rejectDataMap; } ;
更新日志
v0.2.1
- 添加
formatUrl
支持
v0.2.0
- 添加
jsonp
支持
v0.1.8
- 在
rejectConvert
,resolveConvert
回调中新增参数computeOptions
——计算后的axios
请求配置对象
v0.1.7
- 处理一些已知的BUG
v0.1.5
- 重构
options
的获取机制,在执行request
发送时,options
会做一次合并,后续所有配置均在此合并后的对象上读取,合并规则:
var mergeOptions = util;
- 删除
getOptionItem
方法 - 处理一些已知的BUG
v0.1.3
- 为
handlers
的相关convert
方法添加第二个参数requestConfig
- 更新文档:添加options注释
- 处理一些已知的BUG
v0.1.0
- 核心功能实现