UNPKG

bmfe-mobile-template

Version:

BM 移动端模板

62 lines (54 loc) 2.01 kB
import _pick from 'lodash/pick' import _assign from 'lodash/assign' import _isEmpty from 'lodash/isEmpty' import { LOCAL_AJAX, TESTPATH } from 'Config' /** * ApiMachine * @description 简易的api组装器,自动添加命名空间 * @author Zero */ export class ApiMachine { constructor(apiMap = {}) { this._apiMap = {} // Object.keys(apiMap)。。。。返回以apiMap下所有key键组成的数组。 Object.keys(apiMap).map((key) => { // 每个key(即)所对应的所有接口对象。 this.makeApiMap(key, apiMap[key]) }) } makeApiMap(name = "", apis = []) { apis.map((api) => { let apiname = name + '/' + api.name, apiDesc = api.desc, apiMap = this._apiMap, apiParams = api.params || {}, apiBaseURL = LOCAL_AJAX ? TESTPATH : '', apiMethod = api.method || 'get', apiUrl = LOCAL_AJAX ? api.localPath : api.path assert(api.name, `${apiUrl} :接口name属性不能为空`) assert(apiUrl.indexOf('/') === 0, `${apiUrl} :接口路径path,首字符应为/`) Object.defineProperty(apiMap, apiname, { value(params, options) { let _data = _isEmpty(params) ? apiParams : _pick(_assign({}, apiParams, params), Object.keys(apiParams)) return GLOBAL.ajax(normoalize(_assign({ url: apiUrl, baseURL: apiBaseURL, method: apiMethod, desc: apiDesc }, options), _data)) } }) }) } } function normoalize(options, data) { if(options.method === 'POST') { options.data = data }else if (options.method === 'GET') { options.params = data } return options } function assert(condition, msg) { if (!condition) throw new Error(`[ApiMachine] ${msg}`) }