UNPKG

vue-moo

Version:

moo

108 lines (94 loc) 2.47 kB
import axios from 'axios'; import util from '../../util'; const { def, hasPromise } = util; export default class Http { constructor(set = {}) { return this.init(set); } // 配置Http实例 init(set) { this.access = def(set.access, []); this.domain = def(set.domian, ''); this.fakeDelay = def(set.fakeDelay, 1000); this.setHeaders = def(set.setHeaders, params => params); this.setPayload = def(set.setPayload, params => params); this.sender = def(set.sender, null); this.METHOD = '_HRM'; this.QUERY = '_HRQ'; this.BODY = '_HRB'; return this.register(); } // 注册Remote实例方法 register() { const { access } = this; const list = {}; access.map((item) => { list[item.name] = this.request(item); return item; }); return list; } // 自动文本协议 autoContentType(data) { if (data instanceof FormData) return 'multipart/form-data'; if (typeof data === 'Object' && data !== null) return 'application/json'; return 'text/plain'; } // 创建axios的payload createPayload(path, method, query, body, data) { const headers = { 'Content-Type': this.autoContentType(data), }; return this.setPayload({ url: `${this.domain}${path}`, method, headers: this.setHeaders(headers), params: Object.assign({}, query, method === 'POST' ? {} : data), data: Object.assign({}, body, method !== 'POST' ? {} : data), }); } // 请求 request(item) { const { sender, fakeDelay, METHOD, QUERY, BODY } = this; const { name, method, path, fake } = item; return (params = {}) => { const reqMethod = params[METHOD] || method; delete params[METHOD]; const reqQuery = params[QUERY] || {}; delete params[QUERY]; const reqBody = params[BODY] || {}; delete params[BODY]; const payload = this.createPayload( path, reqMethod, reqQuery, reqBody, params); const req = (pl) => { if (fake !== null) { return new Promise(resolve => { setTimeout(() => resolve(fake), fakeDelay); }); } return !sender ? axios(pl) : sender(pl); } // 假设payload返回的是一个promise if (payload && hasPromise(payload)) { return payload.then(set => req(set)); } else { return req(payload); } }; } }