request.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. import extend from './extend.js';
  2. import token from './token.js';
  3. import result from './result.js';
  4. import ResultData from './resultData.js';
  5. /**
  6. * 网络请求
  7. */
  8. const request = {
  9. /**
  10. * 设置基础地址
  11. * @param {string} url - 基础地址
  12. */
  13. setBaseUrl(url) {
  14. if (!extend.isString(url)) {
  15. url = '';
  16. }
  17. extend.addStorage('base_url', url);
  18. },
  19. /**
  20. * 获取基础地址
  21. */
  22. getBaseUrl() {
  23. return extend.readStorage('base_url');
  24. },
  25. /**
  26. * 网络请求
  27. * @param {Object} opts - 请求参数
  28. * @param {string} opts.url - 请求地址
  29. * @param {string} opts.method - 请求方法,默认 get
  30. * @param {string} opts.dataType - 传输数据类型,默认 json
  31. * @param {string} opts.responseType - 接受数据类型,默认 json
  32. * @param {Object} opts.data - 请求参数
  33. * @param {Object} opts.header - 请求头
  34. * @returns {ResultData} 结果对象
  35. */
  36. send(opts) {
  37. return new Promise(async (resolve, reject) => {
  38. if (!extend.isObject(opts)) {
  39. resolve({
  40. success: false,
  41. message: '参数不能为空'
  42. });
  43. return;
  44. }
  45. let data = null;
  46. let url = '';
  47. let baseUrl = request.getBaseUrl();
  48. try {
  49. if (!extend.isUrl(opts.url)) {
  50. if (extend.isEmptyString(baseUrl)) {
  51. resolve({
  52. success: false,
  53. message: '未设置 BaseUrl'
  54. });
  55. return;
  56. } else {
  57. url = baseUrl + opts.url;
  58. }
  59. }
  60. if (!extend.isObject(opts.header)) {
  61. opts.header = {};
  62. }
  63. switch (opts.type) {
  64. case 'json':
  65. opts.header['content-type'] = 'application/json';
  66. break;
  67. case 'text':
  68. opts.header['content-type'] = 'text/html; charset=utf-8';
  69. break;
  70. case 'form':
  71. opts.header['content-type'] = 'multipart/form-data; boundary=something';
  72. break;
  73. case 'url':
  74. opts.header['content-type'] = 'application/x-www-form-urlencoded';
  75. break;
  76. }
  77. if (extend.isEmptyString(opts.method)) {
  78. opts.method = 'get';
  79. }
  80. uni.request({
  81. url: url,
  82. method: opts.method || 'get',
  83. dataType: opts.dataType || 'json',
  84. responseType: opts.responseType || 'text',
  85. header: opts.header || {},
  86. data: opts.data,
  87. timeout: 300000,
  88. async success(res) {
  89. if (res.statusCode === 401) {
  90. let r = await tok.getByServer();
  91. if (r.success) {
  92. res = await Request.send(opts.data);
  93. } else {
  94. return resolve(new ResultData({
  95. success: false,
  96. message: r.message
  97. }));
  98. }
  99. }
  100. res = result.get(res);
  101. resolve(new ResultData({
  102. success: res.success,
  103. message: res.message,
  104. statusCode: res.statusCode,
  105. data: res.data
  106. }));
  107. },
  108. fail(ex) {
  109. console.error(ex);
  110. ex = extend.errorFormatter(ex);
  111. resolve(new ResultData({
  112. success: false,
  113. message: ex.message
  114. }));
  115. }
  116. });
  117. } catch (ex) {
  118. let err = extend.errorFormatter(ex);
  119. console.error(ex);
  120. resolve(new ResultData({
  121. success: false,
  122. message: err.message,
  123. }));
  124. }
  125. });
  126. },
  127. /**
  128. * Token 网络请求
  129. * 在 header 中带 Authorization 参数。
  130. * @param {Object} opts - 请求参数
  131. * @param {string} opts.url - 请求地址
  132. * @param {string} opts.method - 请求方法,默认 get
  133. * @param {Object} opts.data - 请求参数
  134. * @param {Object} opts.header - 请求头
  135. * @returns {RequestResult} 网络请求结果对象
  136. */
  137. async sendToken(opts) {
  138. if (!extend.isObject(opts)) {
  139. return {
  140. success: false,
  141. message: '参数不能为空'
  142. };
  143. }
  144. let tokenStr = token.get();
  145. if (extend.isNonEmptyString(tokenStr)) {
  146. opts.header = {
  147. Authorization: tokenStr
  148. };
  149. }
  150. return await this.send(opts);
  151. }
  152. };
  153. /**
  154. * 网络请求
  155. */
  156. export default request;