modelproxy
1. 解决了什么问题
通过配置文件,自动生成接口的调用方法,参考modelproxy。 在具体的实践过程中,总觉得很多的不满意,修改一下使得满足更多的场景。
上图为小程序的登陆流程。假设我们要发起请求,必须获取上图中的自定义登陆态,而且还需要判定登陆是否过期。
假设我们发起一次接口请求,如何自动登陆,添加自定义登录态数据:
const authCompose = async { // 登陆来获取code,并进行缓存 // 这里对wx的api进行了统一封装,参考自定义engine const data = await proxy; ctxresult = datadatacode; await ;} async { // 用code换取 token,并进行缓存 const data = await proxy; ctxresult = datadatatoken; await ;} async { let settings={} = ctxexecuteInfo; let header={} = settings; // 将token加入到请求头 header"token" = ctxresult; ctxexecuteInfosettings = ...settings header ; await ;} async { // 进行session的校验 // 这里对wx的api进行了统一封装,参考自定义engine const data = await proxy; // 登陆过期 ifctxisError ctxresult = await proxy; return ; await ;} // 这里获取登陆的用户信息,不用考虑登陆的问题const userInfo = await proxy;
2. 安装和依赖
npm install modelproxy
3. API
4. ModelProxy
constructor
构造函数
;
loadConfig
载入接口配置信息,载入后即可调用接口,返回ModelProxy对象;
事例配置:
proxy.loadConfig;
addEngines
加入engines,默认只有default一个engine。
proxy.addEngines;
实例engine,本例中是一个微信小程序的engine。
;;
execute
调用一个接口。返回一个promise对象;
proxy.execute"test","login",;
executeAll
调用多个接口。返回一个promise对象;
proxy.executeAll.thenconsole.log;
race
调用多个接口,返回第一个返回的接口的数据,返回Promise;
proxy.race.thenconsole.log;
getNs
获取一个命名空间,空间中存放的是接口。不同命名空间中使用不同的域名,所以同域名的接口可以配置在同一个配置文件中。返回一个InterfaceFactory对象。
proxy.getNs"test";
mixin
合并多个接口,生成rest风格的接口。返回一个方法。
; ; proxy.loadConfig, ; ; ; console.loguserArticles.path; // /users/1/articles userArticles.get5; // GET /users/1/articles/5 users.get; // GET /users
Cache
缓存设置;
- cacheDec: (func:()=>Promise,key,settings)=> () => Promise;
- settings:
- cache: 是否需要缓存
- reload: 强制失效缓存
- expire: 缓存过期时间(单位毫秒)
5. InterfaceFactory
get
通过get调用接口。这里会覆盖配置文件中配置的method属性。
// 获取文章列表 proxy.getNs"test".get"article".get; // 发送请求 GET http://www.baidu.com/articles
getOne
通过get调用接口。这里会覆盖配置文件中配置的method属性。
// 获取文章的详情,id为1 proxy.getNs"test".get"article".getOne1; // 发送请求 GET http://www.baidu.com/articles/1
post
通过post调用接口。这里会覆盖配置文件中配置的method属性。
proxy.getNs"test".get"article".post; // 发送请求 POST http://www.baidu.com/articles
delete
通过delete调用接口。这里会覆盖配置文件中配置的method属性。
proxy.getNs"test".get"article".delete1; // 发送请求 DELETE http://www.baidu.com/articles/1
put
通过put调用接口。这里会覆盖配置文件中配置的method属性。
proxy.getNs"test".get"article".put1,; // 发送请求 PUT http://www.baidu.com/articles/1
getPath
这个方法用于获取接口的路径,比如socket链接的地址等;
proxy.getNs"test".get"article".getPath; // returns http://www.baidu.com/articles
6. Engines
继承自Compose类;提供接口的具体调用中间件。
proxy
调用接口的时候,会触发这个方法,返回一个Promise对象;
validate
调用接口的时候,会触发这个方法,返回一个Promise;
engine列表
7. compose类
拷贝于koa的compose类;
use
添加一个中间件函数
engine
clear
清除掉所有的中间件方法
compose
生成执行方法,返回一个方法:(context: T, next: MiddleFunc) => Promise
callback
执行compose生成的方法,返回一个方法:() => Promise
errorHandle
错误处理方法
merge
合并多个compose的中间件
8. DEMO
可以贴到runkit中执行
;; proxy.loadConfig, ; ; if login ; if article if login && article
9. ChangeList
- 2.0.8
- 添加了before,after,error中間件處理邏輯
- 1.0.21
- 修复了bug;
- 1.0.20
- 修复了bug;
- 1.0.19
- 修复了bug;
- 1.0.18
- 修复了bug;
- 1.0.17
- 修复了bug;
- 1.0.16
- 修复了bug;
- 1.0.15
- 修复了bug;
- 1.0.14
- 添加了mixin方法,修复了一些bug;
- 1.0.11
- 为compose类添加结束标志位;
- 1.0.10
- 修改Engine中的validate返回值为Promise;
- 1.0.9
- 添加了executeAll和race方法;
10. License
MIT