UNPKG

jshttp

Version:

基于 Axios 的 HTTP 请求库,内置了一些常用功能,支持在任何 Javascript 环境下运行

69 lines (56 loc) 2.15 kB
'use strict' const { settle, createError } = require('../axios-modules') const statuses = require('../static/statuses') /** * 用于客户端 Mock 请求数据,并未发送真实的 HTTP 请求。 */ /** 文档地址 */ const docUrl = 'https://www.npmjs.com/package/jshttp#使用' module.exports = function mockAdapter(config) { const { mock } = config if (typeof mock !== 'object') { throw new Error(`配置项 \`mock\` 要求是一个 \`object\` 类型的值,详情请查看文档 ${docUrl}`) } // 处理参数,所有参数均为选填 const status = mock.status || 200 const statusText = mock.statusText || statuses[status] || 'UnKnown' const headers = mock.headers || {} const data = mock.data const delay = (mock.delay && parseInt(mock.delay, 10)) || 1 const error = mock.error /** 各个平台的 `request` 均不同,这个无法模拟,只能模拟一些基础属性 */ let request = mock.request || { method: config.method, headers: config.headers, data: config.data, } // 超时时间,用于模拟请求超时 const timeout = config.timeout || 0 return new Promise(function dispatchMockRequest(resolve, reject) { /** 请求是否完成 */ let isRequestFinished = false // 模拟请求超时的 `ontimeout` 事件 if (timeout > 0) { setTimeout(() => { if (!isRequestFinished) { const timeoutErrorMessage = config.timeoutErrorMessage || `timeout of ${timeout} ms exceeded` reject(createError(timeoutErrorMessage, config, 'ECONNABORTED', request)) request = null } }, timeout) } // 模拟正常请求流程 setTimeout(() => { isRequestFinished = true if (error) { // 模拟发生错误的 `onerror` 事件 reject(createError('Network Error', config, null, request)) request = null } else { // 请求成功情况 const response = { data, status, statusText, headers, config, request } settle(resolve, reject, response) } }, delay) }) }