当前位置:   article > 正文

vue、uniapp封装网络请求教程_uniapp vue3封装请求

uniapp vue3封装请求

1、在根目录下新建utils文件夹,新建config.js文件,配置好自己的服务器域名

2、在utils文件夹下,再新建封装接口的request.js文件

3、新建api文件,新建api.js文件,用来写具体的接口请求

具体代码如下:

1、在根目录下新建utils文件夹,新建config.js文件,配置好自己的服务器域名

  1. let baseUrl = ""; //域名
  2. if (process.env.NODE_ENV === 'development') {
  3. // 开发环境
  4. baseUrl = `https://××××××.com`;
  5. } else {
  6. // 生产环境
  7. baseUrl = `https://××××××.com`
  8. }
  9. //兑换比例
  10. export default {
  11. baseUrl
  12. }

2、在utils文件夹下,再新建封装接口的request.js文件

  1. import config from './config.js';
  2. import used from './used.js';
  3. //域名
  4. const baseUrl = config.baseUrl;
  5. //请求
  6. function http(opts, token) {
  7. let thisBaseUrl = config[opts.baseUrl] || baseUrl; //单独配置的域名
  8. let httpDefaultOpts = {
  9. url: thisBaseUrl + opts.url,
  10. data: opts.params,
  11. method: opts.method,
  12. timeout: 20000,
  13. sslVerify: false,
  14. header: opts.method == 'GET' ? {
  15. 'X-Requested-With': 'XMLHttpRequest',
  16. "Accept": "application/json",
  17. 'content-Type': 'application/x-www-form-urlencoded'
  18. } : {
  19. 'X-Requested-With': 'XMLHttpRequest',
  20. 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
  21. },
  22. dataType: 'json',
  23. }
  24. //是否带token
  25. if (token) {
  26. httpDefaultOpts.header.token = token;
  27. }
  28. //promise
  29. let promise = new Promise(function(resolve, reject) {
  30. let network; //网络状态
  31. //网络状态
  32. uni.getNetworkType({
  33. success: function(res) {
  34. network = res.networkType;
  35. if (res.networkType == 'none') {
  36. uni.showToast({
  37. title: '无网络',
  38. icon: 'none',
  39. duration: 5000
  40. });
  41. }
  42. }
  43. });
  44. uni.request(httpDefaultOpts).then(
  45. (res) => {
  46. //成功
  47. if (res) {
  48. if (res.statusCode == 200|| ( res.data && res.data.status == "success")) {
  49. //请求成功,返回最终需要的业务数据
  50. resolve(res.data);
  51. } else {
  52. if (res.statusCode == 401 || (res.data && res.data.code == 401)) {
  53. this.removeStorageSyncVal('token');
  54. this.removeStorageSyncVal('userInfo');
  55. uni.showModal({
  56. title: '提示',
  57. content: '请登陆后操作',
  58. success: function(res) {
  59. if (res.confirm) {
  60. uni.redirectTo({
  61. url: '/pages/login/login'
  62. })
  63. } else if (res.cancel) {
  64. uni.navigateTo({
  65. url: '/pages/login/login'
  66. })
  67. }
  68. }
  69. })
  70. reject("登录超时")
  71. return
  72. }
  73. //其他情况的失败,返回失败原因
  74. reject(res.info)
  75. }
  76. } else {
  77. //失败
  78. reject("请求失败")
  79. }
  80. }
  81. ).catch(
  82. (response) => {
  83. reject(response)
  84. }
  85. )
  86. })
  87. return promise
  88. }
  89. //请求 - 不带token
  90. const httpRequest = (opts) => {
  91. opts.params = opts.params ? opts.params : {};
  92. if (opts.params.token) {
  93. return http(opts, opts.params.token);
  94. } else {
  95. return http(opts);
  96. }
  97. };
  98. //请求 - 带Token
  99. const httpTokenRequest = (opts) => {
  100. let token = uni.getStorageSync('token');
  101. opts.params = opts.params ? opts.params : {};
  102. return http(opts, token);
  103. };
  104. export default {
  105. httpRequest,
  106. httpTokenRequest
  107. }

3、新建api文件,新建api.js文件,用来写具体的接口请求

  1. import Request from '@/utils/request.js';
  2. import config from '@/utils/config.js'
  3. export default {
  4. get_new_tips: function(params) {
  5. return Request.httpTokenRequest({
  6. url: '/index/get_new_tips',
  7. method: 'GET',
  8. params: params
  9. });
  10. },
  11. }

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号