当前位置:   article > 正文

uniapp微信小程序-请求二次封装(直接可用)_uni-app中如何封装请求

uni-app中如何封装请求

一、请求封装优点

  • 代码重用性:通过封装请求,你可以在整个项目中重用相同的请求逻辑。这样一来,如果 API 发生变化或者需要进行优化,你只需在一个地方修改代码,而不是在每个使用这个请求的地方都进行修改。

  • 可维护性:封装请求使代码更易维护。所有的请求逻辑都集中在一个地方,降低了维护成本。当需要添加新的功能、处理错误或者进行性能优化时,只需修改封装的请求逻辑而无需深入到每个组件或页面中。

  • 错误处理:封装的请求可以统一处理错误,提高了错误处理的一致性。你可以在请求拦截器中处理一些通用的错误,例如网络错误、权限问题等,使代码更加健壮。

  • 统一配置:通过封装,可以在一个地方统一配置请求的一些参数,例如基本路径、请求超时时间、请求头等。这简化了全局配置的管理。

  • 请求拦截器:使用请求拦截器可以在发送请求前进行一些操作,比如添加认证信息、加载 loading 状态等。这提高了代码的灵活性和可扩展性。

  • 响应拦截器:响应拦截器可以在处理响应数据前进行一些操作,例如统一处理后端返回的错误码、格式化数据等。这样可以在前端层面统一处理后端的响应规范。

  • 业务逻辑分离:通过封装请求,你可以将业务逻辑和数据获取逻辑分离开来。组件或页面只需关注业务逻辑,而不用关心具体的请求细节,使代码更加清晰。

二、之前代码的封装 

  1. const config_url= "";这里写你的域名
  2. const request = (url, data = {}, method = 'GET') => {
  3. return new Promise((resolve, reject) => {
  4. uni.request({
  5. url: config_url + url,
  6. data: data,
  7. method: method,
  8. header: {
  9. 'X-Requested-With': 'XMLHttpRequest',
  10. "Accept": "application/json",
  11. "Content-Type": 'application/json',
  12. },
  13. dataType: 'json',
  14. success: (res) => {
  15. const responseData = interceptor(res.data);
  16. if (responseData.code === 200 || responseData.code === 500 ||responseData
  17. .code === 4025) {
  18. resolve(responseData);
  19. } else {
  20. throwErr(res)
  21. reject(res);
  22. }
  23. },
  24. fail: function(err) {
  25. reject(err)
  26. }
  27. })
  28. });
  29. };
  30. // GET 请求封装
  31. const get = (url, data) => {
  32. return request(url, data, 'GET');
  33. };
  34. // POST 请求封装
  35. const post = (url, data) => {
  36. return request(url, data, 'POST');
  37. };
  38. // PUT 请求封装
  39. const put = (url, data) => {
  40. return request(url, data, 'PUT');
  41. };
  42. // DELETE 请求封装
  43. const del = (url, data) => {
  44. return request(url, data, 'DELETE');
  45. };
  46. // 请求拦截
  47. function interceptor(response) {
  48. if (response.code === -2) {
  49. uni.showToast({
  50. title: response.msg,
  51. icon: 'none',
  52. duration: 2000,
  53. complete: () => {
  54. uni.reLaunch({
  55. url: '/pages/index/index',
  56. });
  57. },
  58. });
  59. return false;
  60. }
  61. return response;
  62. }
  63. // 处理错误
  64. function throwErr(res) {
  65. if (res.code == 500) {
  66. uni.showToast({
  67. title: res.msg,
  68. })
  69. }
  70. }
  71. export {
  72. get,
  73. post,
  74. put,
  75. del
  76. }

 1.main.js注册一下

  1. import App from './App'
  2. import uView from '@/node_modules/uview-ui'
  3. import * as request from '@/api/request';
  4. // import Lame from 'lamejs'
  5. Vue.use(uView)
  6. // #ifndef VUE3
  7. import Vue from 'vue'
  8. import './uni.promisify.adaptor'
  9. import store from "./store/index.js"
  10. Vue.config.productionTip = false
  11. Vue.prototype.$store = store
  12. //这里注册一下就好
  13. Vue.prototype.$request = request;
  14. App.mpType = 'app'
  15. const app = new Vue({
  16. store,
  17. ...App
  18. })
  19. app.$mount()
  20. // #endif
  21. // #ifdef VUE3
  22. import {
  23. createSSRApp
  24. } from 'vue'
  25. export function createApp() {
  26. const app = createSSRApp(App)
  27. return {
  28. app
  29. }
  30. }
  31. // #endif

2.使用请求 

  1. this.$request.post("/sz"这里是路径, {
  2. 这里写携带参数
  3. }, ).then((res) => {
  4. 这里写成功之后的
  5. }, (err) => {
  6. 这里处理失败之后的
  7. })

总结:之前的比较拉不好用也可以用,api没写在一块

三、使用uview2.0的请求封装 (Http请求 | uView 2.0 - 全面兼容 nvue 的 uni-app 生态框架 - uni-app UI 框架 (uviewui.com)

1.前置条件

安装了uview组件库,才能操作下来的操作

2.首先建两个文件夹存放封装的请求和二次封装的api,代码会放在下面直接用就行

a.  request.js
  1. // 此vm参数为页面的实例,可以通过它引用vuex中的变量
  2. module.exports = (vm) => {
  3. // 初始化请求配置
  4. uni.$u.http.setConfig((config) => {
  5. /* config 为默认全局配置*/
  6. config.baseURL = 'https://httpbin.org'; /* 根域名 */
  7. return config
  8. })
  9. // 请求拦截
  10. uni.$u.http.interceptors.request.use((config) => { // 可使用async await 做异步操作
  11. // 初始化请求拦截器时,会执行此方法,此时data为undefined,赋予默认{}
  12. return config
  13. }, config => { // 可使用async await 做异步操作
  14. return Promise.reject(config)
  15. })
  16. // 响应拦截
  17. uni.$u.http.interceptors.response.use((response) => { /* 对响应成功做点什么 可使用async await 做异步操作*/
  18. const data = response.data
  19. return data === undefined ? {} : data
  20. }, (response) => {
  21. // 对响应错误做点什么 (statusCode !== 200)
  22. return Promise.reject(response)
  23. })
  24. }
b.   api.js
  1. const http = uni.$u.http
  2. // post请求,获取菜单
  3. export const postMenu = (data) => http.post('/post', data)
c.    main.js(把那个request.js引用一下)
  1. import App from './App'
  2. // #ifndef VUE3
  3. import Vue from 'vue'
  4. import uView from '@/uni_modules/uview-ui'
  5. Vue.use(uView)
  6. Vue.config.productionTip = false
  7. App.mpType = 'app'
  8. const app = new Vue({
  9. ...App,
  10. })
  11. require('@/pages/utils/request.js')(app)
  12. app.$mount()
  13. // #endif
 d.  使用的话
  1. postMenu({
  2. usename: "lijiang",
  3. password: "123"
  4. }).then(res => {
  5. console.log(res, res);
  6. })

四、接口调试工具(Postman VS Apifox | Apifox 比 Postman 更适合中国开发者)


个人觉得挺好用的你先看下接口能用吗,前面找的接口不能用害我找了很长时间原因

五、接口找的这个博主的感谢get/post在线接口_在线接口请求-CSDN博客 

代码直接可用完结,大佬勿喷,有什么问题可私信

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/318509
推荐阅读
相关标签
  

闽ICP备14008679号