CloudFuncPlugin

CloudFuncPlugin

请求管理-云函数插件
将云函数封装成http接口形式使用,便于:

  1. 使用requester提供的各种逻辑扩展能力
  2. 后续在云函数和后端服务器之间进行各种业务的相互迁移

详见[基础能力] 灵活易扩展的请求管理

Constructor

new CloudFuncPlugin(pluginNameopt, fakeDomainopt, fakeRootPathopt)

Source:

构造函数

Examples
使用默认配置
let requester = new Requester({
  plugins: [
    new CloudFuncPlugin() //使用默认配置
  ]
});

//则调用接口 
let res = await requester.request({
  url: 'https://cloud.function/xxx?a=1&b=2'
});
//等价于调用云函数 
let res = await wx.cloud.callFunction({
  name: 'xxx',
  data: {
    a: "1",
    b: "2",
  }
})
自定义虚拟域名和虚拟路径
let requester = new Requester({
  plugins: [
    new CloudFuncPlugin({ //自定义虚拟域名和虚拟路径
      fakeDomain: 'fancy.com',
      fakeRootPath: '/demos/cloud/'
    })
  ]
});

//则调用指定虚拟域名虚拟路径下的接口
let res = await requester.request({
  url: 'https://fancy.com/demos/cloud/xxx?a=1&b=2'
});
//等价于调用对应云函数
let res = await wx.cloud.callFunction({
  name: 'xxx',
  data: {
    a: "1",
    b: "2",
  }
})
云函数实现
 exports.main = async (event, context) => {
        //云函数格式约定:
        
        let {a, b} = event; //调用方传入的参数可以通过event获取
        a = Number(a); //参数类型统一为string
        b = Number(b);
      
        //此外,还会额外拼入一些http相关参数
        let {reqHeader} = event; //http请求header信息
        console.log(reqHeader.cookie); //header中的cookie字段会解析成对象格式,形如:{uid: 'xxx'}
      
        //处理结果正常返回
        let result = { sum: a+b };
        
        //此外,有一些保留字段可以用于设置http相关参数
        result.resStatusCode = 200; //设置http状态码
        result.resHeader = {}; //设置http返回结果中的header信息
        result.resHeader['Set-Cookie'] = [ //同一header有多条记录时,以数组形式设置
          'uid=xxx;expires=111',
          'sessionKey=yyy;expires=222'
        ] 
        
        return result;
      }
Parameters:
Name Type Attributes Default Description
pluginName string <optional>
'CloudFuncPlugin'

插件名称

fakeDomain string <optional>
'cloud.function'

虚拟域名

fakeRootPath string <optional>
'/'

虚拟根路径

Extends

Members

pluginName :string

Source:
Overrides:

插件名称,主要用于打印日志和调试,便于追溯操作源

Type:
  • string

requester :Requester

Source:
Overrides:

请求管理器

Type:

Methods

(async, protected) _execCloudFunc(funcName, funcParams) → {Object}

Source:

执行云函数

Parameters:
Name Type Description
funcName string

函数名

funcParams object

函数入参

Returns:

云函数执行结果

Type
Object

(protected) _parseReq(reqOptions) → {Object}

Source:

解析请求,将http请求解析成云函数调用

Parameters:
Name Type Description
reqOptions Requester~ReqOptions
Returns:

解析结果,格式形如:{
hit: true, //是否为云函数调用
funcName: 'xxx', //云函数函数名
funcParams: { //云函数入参
a: "1",
b: "2",
reqHeader: {}
}
}

Type
Object

(protected) _parseRes(cloudRes) → {Requester~ReqRes}

Source:

解析返回结果,将云函数返回结果解析成http请求结果

Parameters:
Name Type Description
cloudRes Object

云函数执行结果

Returns:

对应的http请求结果

Type
Requester~ReqRes

afterRequest(reqOptions, thisIssuer, reqRes) → {undefined|Requester~AfterRequestRes}

Source:
Overrides:

钩子函数,请求返回之后调用,同步
不会等待异步操作返回,如需等待异步逻辑,请改用BasePlugin#afterRequestAsync

Parameters:
Name Type Description
reqOptions Requester~ReqOptions

请求参数

thisIssuer object

发起接口请求的this对象

reqRes Requester~ReqRes

请求结果

Returns:

期望的后续处理,undefined表示继续执行默认流程

Type
undefined | Requester~AfterRequestRes

(async) afterRequestAsync(reqOptions, thisIssuer, reqRes) → {undefined|Requester~AfterRequestRes}

Source:
Overrides:

钩子函数,请求返回之后调用,异步
会等待async函数resolve,若无异步逻辑,建议使用BasePlugin#afterRequest

Parameters:
Name Type Description
reqOptions Requester~ReqOptions

请求参数

thisIssuer object

发起接口请求的this对象

reqRes Requester~ReqRes

请求结果

Returns:

期望的后续处理,undefined表示继续执行默认流程

Type
undefined | Requester~AfterRequestRes

beforeRequest(reqOptions, thisIssuer) → {undefined|Requester~BeforeRequestRes}

Source:
Overrides:

钩子函数,发请求之前调用,同步
不会等待异步操作返回,如需等待异步逻辑,请改用BasePlugin#beforeRequestAsync

Parameters:
Name Type Description
reqOptions Requester~ReqOptions

请求参数

thisIssuer object

发起接口请求的this对象

Returns:

期望的后续处理,undefined表示继续执行默认流程

Type
undefined | Requester~BeforeRequestRes

(async) beforeRequestAsync(reqOptions, thisIssuer) → {undefined|Requester~BeforeRequestRes}

Source:
Overrides:

钩子函数,发请求之前调用,异步
会等待async函数resolve,若无异步逻辑,建议使用BasePlugin#beforeRequest

Parameters:
Name Type Description
reqOptions Requester~ReqOptions

请求参数

thisIssuer object

发起接口请求的this对象

Returns:

期望的后续处理,undefined表示继续执行默认流程

Type
undefined | Requester~BeforeRequestRes

mount(requester)

Source:
Overrides:

钩子函数,插件被挂载到requester对象上时触发

Parameters:
Name Type Description
requester Requester

被挂载到的requester对象