介绍

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

封装uni-app的request方法,使用方法更简单、方便
支持:请求和响应拦截,对象内的函数回调或Promise,支持typescript
推荐更新到最新版本

兼容性问题、设置**超时时间,**请查看官方文档官方文档: 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.全局参数 (setConfig)

参数列表

参数 类型 必填 默认值 说明
url String 基地址(baseUrl)
dataType String json 对返回的数据做一次 JSON.parse
responseType String text 设置响应的数据类型
contentType String form 设置请求参数的数据类型,默认已添加utf-8
header Object 设置请求的 header,header 中不能设置 Referer,header中设置”content-type”参数会覆盖上面的方法

如何配置全局文件

1.单独引用

  1. // main.js
  2. import request from '@/utils/request.js';
  3. // 设置全局参数
  4. request.setConfig({
  5. url:"http://www.baidu.com", // 基地址
  6. dataType:"json", // 响应数据格式化
  7. header:{ // 请求头, 可选
  8. token:"xxxx"
  9. }
  10. });

2.直接引用配置文件(v1.2版本新增) 推荐
配置文件部分代码如下

  1. // plugins/request/js/index
  2. import request from './request';
  3. // 设置全局配置
  4. request.setConfig({
  5. url: 'https://easy-mock.com/mock/', // 基地址
  6. // contentType: 'json',
  7. header: {
  8. // uid:'xxxx'
  9. }
  10. });

2.全局拦截器 (interceptors)

1.单独引用

  1. /**
  2. * @description: 请求拦截器
  3. * @param {object} 当前请求配置参数
  4. * @return 不return对象,则不发送当前请求
  5. */
  6. request.interceptors.request(config => {
  7. return config;
  8. });
  9. /**
  10. * @description: 响应拦截器
  11. * @param {object} 当前请求成功回调数据
  12. * @return 不return对象,则不返回数据
  13. */
  14. request.interceptors.response(res => {
  15. return res;
  16. })

2.直接引用配置文件(v1.2版本新增) **推荐配置文件部分代码如下

  1. import request from './request';
  2. // 不return config或者return false, 都不会发送请求(例如配置token)
  3. request.addInterceptors.request(config => {
  4. return config;
  5. })
  6. // 不return res或者return false, 则都不会返回值
  7. // return Promise.reject('xxxxx'),主动抛出错误
  8. request.addInterceptors.response(res => {
  9. let firstCodeNum = String(res.statusCode).substr(0, 1)
  10. // 2xx
  11. if (firstCodeNum === '2') {
  12. // do something
  13. return res;
  14. }
  15. // 3xx
  16. if (firstCodeNum === '3') {
  17. // do something
  18. return res;
  19. }
  20. // 4xx or 5xx
  21. if (firstCodeNum === '4' || firstCodeNum === '5') {
  22. // do something
  23. return Promise.reject(res)
  24. }
  25. // 停止发送请求 request.stop()
  26. if (JSON.stringify(res) === '{"errMsg":"request:fail abort"}') {
  27. // do something
  28. return false;
  29. // return Promise.reject('xxxxxxxxx');
  30. }
  31. return Promise.reject(res)
  32. })

3.实例 (Example)

参数列表

实例里的数据优先级更高,相同参数会覆盖全局设置里的参数

参数 类型 必填 默认值 说明
url String 填写相对路径,如果没设置基地址(baseUrl),则填写绝对路径
header Object 设置请求的header参数
dataType String json 设置返回的数据格式
responseType String text 设置响应的数据类型
contentType String form 设置请求参数的数据类型,默认已添加utf-8
data Object 设置请求的参数
success Function 接受服务器返回参数的回调函数
fail Function 接口调用失败的回调函数
complete Function 接口调用结束的回调函数(调用成功、失败都会执行)
then、catch Promise 默认返回Promise,使用回调函数就不会运行返回Promise
finally Promise 和complete一样,但是没有返回值

contentType参数设置,默认添加utf-8

类型 说明
json application/json
form application/x-www-form-urlencoded,默认值
file multipart/form-data

success、complete和then返回参数说明

参数 类型 说明
statusCode Number 服务器返回的 HTTP 状态码
errMsg String
data Object/String/ArrayBuffer 服务器返回的数据
header Object 服务器返回的 HTTP Response Header

get

  1. Request
  2. .get({
  3. url: "https://www.easy-mock.com/mock/xxxxxxxxx",
  4. data: {
  5. name: "xxx"
  6. },
  7. header:{
  8. "token": "xxx"
  9. },
  10. })
  11. .then(res => {
  12. console.log(res)
  13. })
  14. .catch(res => {
  15. console.log(res)
  16. });

post

  1. Request
  2. .post({
  3. url: "https://www.easy-mock.com/mock/xxxxxxxxx",
  4. data: {
  5. name: "xxx"
  6. },
  7. header:{
  8. "token": "xxx"
  9. },
  10. })
  11. .then(res => {
  12. console.log(res)
  13. })
  14. .catch(res => {
  15. console.log(res)
  16. });

stop

  1. let e = Request.get({ url: "/get" });
  2. Request.stop(e)

4.如何使用(demo)

1.单独使用

  1. // 引入文件
  2. import request from '@/utils/request.js';
  3. // 设置全局参数
  4. request.setConfig({
  5. url:"http://www.baidu.com", // 基地址, 可选
  6. dataType:"json", // 传参方式, 可选
  7. header:{ // 请求头, 可选
  8. token:"xxxx"
  9. }
  10. });
  11. /**
  12. * @description: 请求拦截器
  13. * @param {object} 当前请求配置参数
  14. * @return 不return对象,则不发送当前请求
  15. */
  16. request.interceptors.request(config => {
  17. return config;
  18. });
  19. /**
  20. * @description: 响应拦截器
  21. * @param {object} 当前请求成功回调数据
  22. * @return 不return对象,则不返回数据
  23. */
  24. request.interceptors.response(res => {
  25. return res;
  26. });
  27. let e = Request
  28. .get({
  29. url: "/get",
  30. // 实例里的header参数内容会覆盖全局里的header参数内容
  31. header: {
  32. "content-type": "application/json"
  33. },
  34. data: {
  35. name: "xxx",
  36. },
  37. // 对象内的回调函数优先级高于Promise, 所以下面的then、catch和finally不运行
  38. success: res => {
  39. // do something
  40. },
  41. fail: res => {
  42. // do something
  43. },
  44. complete: res => {
  45. // do something
  46. }
  47. })
  48. e
  49. .then(res => {
  50. // do something
  51. })
  52. .catch(res => {
  53. // do something
  54. })
  55. .finally(() => {
  56. // do something
  57. })
  58. // 停止发送请求
  59. Request.stop(e)

2.引用配置文件(推荐)

  1. // 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. $_callback () {
  10. let r = request.get({
  11. url: "https://easy-mock.com/mock/5cda87e31d38be0d2dd91a44/example/get",
  12. data: {
  13. a: "aaaa"
  14. },
  15. contentType: "form",
  16. success: res => {
  17. console.log("success", res);
  18. },
  19. fail: err => {
  20. console.log("fail", err);
  21. },
  22. complete: res => {
  23. console.log("complete: ", res);
  24. }
  25. });
  26. // request.stop(r);
  27. },
  28. $_promise () {
  29. let r = request
  30. .get({
  31. url: "https://easy-mock.com/mock/5cda87e31d38be0d2dd91a44/example/get",
  32. })
  33. .then(res => {
  34. console.log("then: ", res);
  35. })
  36. .catch(err => {
  37. console.log("catch", err);
  38. })
  39. .finally(() => {
  40. console.log("is finally");
  41. });
  42. // request.stop(r);
  43. }
  44. },
  45. created () {
  46. this.$_callback();
  47. // this.$_promise();
  48. }
  49. }
  50. </script>

最后

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

email: 2460392754@qq.com
qq: 2460392754

欢迎交流或探讨问题!