介绍

开发不易,能给插件一个好评**吗,拜托了!

封装uni-app的request方法,使用方法更简单、方便。
特点:

  • 支持 callback 回调函数或者 Promise
  • 支持全局、局部的请求和响应拦截器
  • 支持添加配置文件
  • 支持根据接口自定义处理
  • 支持所有 method 方法
  • 支持 params 参数属性
  • 支持文件上传和下载

推荐更新到最新版本

兼容性问题、设置**超时时间,**请查看官方文档官方文档: https://uniapp.dcloud.io/api/request/request?id=request

下载地址

推荐先下载示例项目
github: https://github.com/2460392754/uniapp-tools/tree/master/request
dcloud: https://ext.dcloud.net.cn/plugin?id=468

更新日志

https://ext.dcloud.net.cn/plugin?id=468&update_log

1.兼容性测试

✅微信小程序
✅h5
✅android
❓其他平台(没测试)
❗跨域会直接进入fail或catch

2.目录结构

示例项目的目录结构

  1. hBuilderX\plugins\request
  2. ├── pages
  3. └── index
  4. └── index.vue 页面
  5. ├── plugins
  6. └── request
  7. └── js
  8. ├── index.js 配置文件
  9. └── request.js 插件
  10. ├── xhr
  11. └── index.xhr.js 接口
  12. ├── App.vue
  13. ├── jsconfig.json
  14. ├── main.js
  15. ├── manifest.json
  16. ├── pages.json
  17. ├── README.md
  18. └── tsconfig.json

3.运行流程图

uniapp-tools request (1).svg

4.配置文件

setConfig的参数列表

语雀内容

文件内容

  1. // plugins/request/js/index.js
  2. import request from './request';
  3. // 设置全局配置
  4. request.prototype.setConfig({
  5. url: 'https://easy-mock.com/mock/', // 基地址
  6. // contentType: 'json',
  7. // header: {
  8. // uid: 'xxxx'
  9. // }
  10. });
  11. // 全局拦截器
  12. request.prototype.addGlobalInterce({
  13. // 请求拦截器 (例如配置token)
  14. // return false或者不return值, 都不会发送请求
  15. request (config) {
  16. console.log('📖 is global request interceptors', config)
  17. return config;
  18. // return false;
  19. },
  20. // 响应拦截器 (例如根据状态码拦截数据)
  21. // return false或者不return值 则都不会返回值
  22. // return Promise.reject('xxxxx'),主动抛出错误
  23. response (res) {
  24. let firstCodeNum = String(res.statusCode).substr(0, 1);
  25. console.log('📫 is global response interceptors', res)
  26. // 2xx
  27. if (firstCodeNum === '2') {
  28. // do something
  29. // res.data.data.text = 'addGlobalInterce response'
  30. return res;
  31. }
  32. // 3xx
  33. if (firstCodeNum === '3') {
  34. // do something
  35. return res;
  36. }
  37. // 4xx or 5xx
  38. if (firstCodeNum === '4' || firstCodeNum === '5') {
  39. // do something
  40. console.log('is 4xx or 5xx')
  41. return Promise.reject('nooooo')
  42. }
  43. // 停止发送请求 request.stop()
  44. if (JSON.stringify(res) === '{"errMsg":"request:fail abort"}') {
  45. // do something
  46. // return Promise.reject('xxxxxxxxx');
  47. return false;
  48. }
  49. // return Promise.reject(res)
  50. return res;
  51. }
  52. });
  53. export default request

5.实例的参数列表

语雀内容

参数 类型 版本 必填 默认值 说明
params Object 1.3.4 设置QueryString

6.如何使用

把插件2次封装后挂载到全局则无法使用局部拦截器,可以自由取舍
**
1.直接引入到vue文件中

  1. // pages/index/index.vue
  2. <template>
  3. <div></div>
  4. </template>
  5. <script>
  6. import request from '../../plugins/request/js/index'
  7. export default {
  8. methods: {
  9. // promise
  10. getMockDataMethodGet () {
  11. const instance = new request();
  12. const r = instance.get({
  13. url: "/5cda87e31d38be0d2dd91a44/example/get",
  14. data: { text: 'method type is get' },
  15. contentType: 'form',
  16. })
  17. .then(res => {
  18. console.log('👍👍👍👍👍 then', res)
  19. })
  20. .catch(err => {
  21. console.log('⛔⛔⛔⛔⛔ catch', err)
  22. })
  23. .finally(() => {
  24. console.log('😐😐😐😐😐 finally')
  25. })
  26. },
  27. },
  28. created () {
  29. this.getMockDataMethodGet();
  30. }
  31. }
  32. </script>

2.到业务接口文件中单独处理,也可以添加局部拦截器,根据业务需要自定义拦截(推荐)

  1. // xhr/index.xhr.js
  2. import request from '../plugins/request/js/index'
  3. export default {
  4. // get请求 ,callback
  5. getMockDataMethodGet ({ success, fail, complete } = {}, canRunState = true) {
  6. const instance = new request();
  7. // 局部请求拦截器
  8. instance.addInterceptors.request(config => {
  9. console.log('📑 request config: ', config)
  10. return config;
  11. // return false;
  12. })
  13. // 局部响应拦截器
  14. instance.addInterceptors.response(res => {
  15. console.log(`📧 response result`, res)
  16. // return res.data
  17. return res;
  18. // return false;
  19. })
  20. const r = instance.get({
  21. url: "/5cda87e31d38be0d2dd91a44/example/get",
  22. data: { text: 'method type is get' },
  23. contentType: 'form',
  24. success: res => {
  25. console.log('👍 getMockDataGet success: ', res)
  26. success && success(res)
  27. },
  28. fail: err => {
  29. console.log(`⛔ getMockDataGet fail: `, err)
  30. fail && fail(err)
  31. },
  32. complete: res => {
  33. console.log(`😐 getMockDataGet complete: `, res)
  34. complete && complete(res)
  35. }
  36. });
  37. // 停止发生请求
  38. !canRunState && instance.stop(r)
  39. },
  40. }

上传和下载除了url会进行合并,其他数据都不会合并,也没有做数据名称适配,设置参数和官方的一样,但也会走拦截器
上传

  1. return new request().upload({
  2. url: "https://www.easy-mock.com/mock/5cda87e31d38be0d2dd91a44/example/upload",
  3. name: 'file',
  4. filePath: 'data:image/png;base64,xxxxxxxxxx',
  5. formData: { text: 'is mock upload file' },
  6. });

下载

  1. return new request().download({
  2. url: 'https://dummyimage.com/120x60',
  3. })

最后

出现bug了?
遇到无法解决的问题?
直接加我q或者发邮件也行

email: 2460392754@qq.com
qq: 2460392754

欢迎交流或探讨问题!