首页 > 其他分享 >uniapp快速分享知识点,请求简单封装 登陆 ,支付 , 分享 , 短信,

uniapp快速分享知识点,请求简单封装 登陆 ,支付 , 分享 , 短信,

时间:2024-05-25 08:57:03浏览次数:20  
标签:知识点 http uniapp res console uni 分享 config response

第一部份requrety请求封装 

备注:关于环境配置 ui选择 插件安装在我的另一个帐号中前几天也经写了,这个博客就不用在写一遍了

另一博客地址:https://www.cnblogs.com/ZzwWan/p/18202502

module.exports = (vm) => {
  // 初始化请求配置
  uni.$u.http.setConfig((config) => {
    // config 为默认全局配置
    // config.baseURL = 'http://uat.banlu.xuexiluxian.cn'; // 根域名

// 设置跨域请求相关配置  以下如果不跨域可以不配以下二行,也可以在main.js 页去配置
    config.withCredentials = true; // 允许携带凭证(如 cookies)
    config.headers['Access-Control-Allow-Origin'] = '*'; // 允许任何域名访问

return config; }); // 请求拦截器 uni.$u.http.interceptors.request.use( async (config) => { // 可以使用 async/await 进行异步操作 return config; }, (config) => { // 可以使用 async/await 进行异步操作 return Promise.reject(config); } ); // 响应拦截器 uni.$u.http.interceptors.response.use( async (response) => { // 对响应成功做点什么,可以使用 async/await const data = response.data; return data; }, (response) => { // 对响应错误做点什么(statusCode 1 == 200) return Promise.reject(response); } ); };

  上面封装好以后就可以在main.js配置一下 

import Vue from 'vue';
import App from './App.vue';
import uHttp from 'uni-http';

Vue.config.productionTip = false;

// 初始化 uni.$u.http
Vue.prototype.$u.http = uHttp.create({
  baseURL: 'https://example.com', // 设置根域名
  withCredentials: true, // 允许携带凭证(如 cookies)
  headers: {
    'Access-Control-Allow-Origin': '*', // 允许任何域名访问
  },
});

new Vue({
  render: (h) => h(App),
}).$mount('#app');

 最后可以在页面中调用,

  <view>
   <button @click="fetchData">获取数据</button>
  </view>
</template><script>
export default {
  methods: {
    async fetchData() {
      try {
        const response = await this.$u.http.get('/api/data');
        console.log('获取到的数据:', response.data);
      } catch (error) {
        console.error('请求失败:', error);
      }
    },
  },
};
</script>

附彷vue3 语法  封装请求:

//封装vue3请求,非uniapp   // http.js
import { ref } from 'vue';

const baseUrl = 'https://your-api-endpoint.com'; // 你的API基础URL

// 请求拦截器
const requestInterceptor = (config) => {
  // 在发送请求之前做些什么
  const token = uni.getStorageSync('token'); // 假设token存储在本地
  if (token) {
    config.header.Authorization = `Bearer ${token}`; // 如果有token,则添加到请求头
  }
  return config;
};

// 响应拦截器
const responseInterceptor = (response) => {
  // 对响应数据做点什么
  if (response.statusCode >= 200 && response.statusCode < 300) {
    return response.data;
  } else {
    // 如果状态码不在 2xx 范围内,统一处理错误
    uni.showToast({
      title: response.data.message || '请求失败',
      icon: 'none'
    });
    return Promise.reject(response);
  }
};

// 创建请求方法
const http = (options) => {
  const { url, data, method = 'GET', header = {} } = options;
  return new Promise((resolve, reject) => {
    uni.request({
      url: baseUrl + url,
      data,
      method,
      header,
      success(res) {
        resolve(responseInterceptor(res));
      },
      fail(err) {
        reject(err);
      }
    });
  });
};

// 导出HTTP实例
export default http;
View Code

实用示例,非uniapp 请可以忽略,这是传统vue3

// SomeComponent.vue<template>
  <!-- 组件模板 -->
</template><script setup>
import { ref } from 'vue';
import http from './http'; // 引入封装好的HTTP方法

const fetchData = async () => {
  try {
    const response = await http({
      url: '/some-endpoint',
      method: 'GET'
    });
    console.log(response);
  } catch (error) {
    console.error('请求失败:', error);
  }
};

fetchData(); // 在组件加载时获取数据
</script>
View Code

 

 登陆示例:

先调取加载用户的系统自带方法,获取用户信息,然后调用微信登陆拿到code  这个时候微信登陆了,但是还没有登我们的系统,我们再将前二步获取的信息在我们的服务器陆就好

整体流程代码为:

wxLogin() {
  // 调用uni.getUserInfo方法获取用户信息
  uni.getUserInfo({
    desc: '登录的数据', // 描述信息
    success(ures) { // 获取用户信息成功后的回调函数
      console.log(ures, '返回的用户信息'); // 打印用户信息

      // 调用uni.login方法进行微信登录
      uni.login({
        success(lres) { // 登录成功后的回调函数
          console.log(lres, '请求微信登录返回的数据'); // 打印登录返回的数据

          // 创建一个参数对象,包含code字段
          let params = {
            code: lres.code
          };

          // 调用loginByWechat方法进行微信一键登录
          methods: {
            loginByWechat(params).then(res => {
              console.log(res, '微信一键登录返回的数据'); // 打印一键登录返回的数据
            })
          }
        }
      });
    }
  });
}

  登陆我们自己的服务器方法要自己写,以下只是参考:实际逻辑可以判 断用户openid 存不存在,或我们的系统id ,做依据,这个随意,

uni.login({
  provider: 'weixin',
  success: function (res) {
    console.log('登录成功,code:' + res.code);
    // 调用自定义函数,使用 code 码换取用户信息
    loginByWechat({ code: res.code }).then(res => {
      console.log(res, '微信一键登录返回的数据');
    });
  },
  fail: function (err) {
    console.log('登录失败:' + JSON.stringify(err));
  }
});

function loginByWechat(params) {
  return new Promise((resolve, reject) => {
    // 调用你自己的后端接口,使用 code 码换取用户信息
    wx.request({
      url: 'https://your_server_url/loginByWechat', // 你自己的后端接口地址
      data: params,
      success: function (res) {
        console.log('获取用户信息成功:' + JSON.stringify(res));
        resolve(res);
      },
      fail: function (err) {
        console.log('获取用户信息失败:' + JSON.stringify(err));
        reject(err);
      }
    });
  });
}

  

 

 

 

 

 

 

标签:知识点,http,uniapp,res,console,uni,分享,config,response
From: https://www.cnblogs.com/fgxwan/p/18211979

相关文章

  • 基于springboot+vue的原创歌曲分享平台
    开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9系统展示系统首页用户注册音乐分享个人中心后台登录管理员功能界面用户管理音乐分类管理音乐分享管......
  • 【专题】2024体验赋能企业出海白皮书报告合集PDF分享(附原数据表)
    原文链接:https://tecdat.cn/?p=36251原文出处:拓端数据部落公众号在全球化浪潮日益汹涌的商业环境中,出海企业正面临着前所未有的机遇与严峻挑战。面对产品和服务日益同质化的问题,企业如何在国际市场上独树一帜?答案并非仅仅依赖于创新和成本控制。如今,以“体验+品牌”为核心的战......
  • 【专题】2023年中国跨境电商平台出海白皮书报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=34454原文出处:拓端数据部落公众号自九十年代以来,中国跨境电商已经经历了四个发展阶段,其中B2C跨境电商有望在2022年后迎来高峰。阅读原文,获取专题报告合集全文,解锁文末372份跨境电商出海相关行业研究报告。通过分析B2C跨境电商市场的发展驱动因子,......
  • 【专题】2024抖音春日热点报告-餐饮篇报告合集PDF分享(附原数据表)
    原文链接:https://tecdat.cn/?p=35422原文出处:拓端数据部落公众号2023年,中国经济表现稳健,零售消费稳定增长,尤其国内旅游市场迅速回暖,人们出行频率回升,酒店、餐饮和旅游服务的消费需求稳步攀升,为相关行业复苏提供了强大动力。据文化和旅游部数据显示,全年国内旅游总人次和收入均实......
  • 数据分享|R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病|附代码
    全文链接:http://tecdat.cn/?p=23061最近我们被客户要求撰写关于预测心脏病的研究报告,包括一些图形和统计输出。这个数据集可以追溯到1988年,由四个数据库组成。克利夫兰、匈牙利、瑞士和长滩。"目标"字段是指病人是否有心脏病。它的数值为整数,0=无病,1=有病数据集信息:目标:主......
  • 2024“中国电机工程学会杯”数学建模大赛A题思路和代码分享
    A题:园区微电网风光储协调优化配置        这个题目整体就是一个优化问题,可以采用Matlab+Yalmip+Gurobi求解器进行求解,持续更新中,敬请关注!!        园区微电网由风光发电和主电网联合为负荷供电,为了尽量提高风光电量的负荷占比,需配置较高比例的风光发电装机......
  • 【资料分享】你敢相信这些高大上的BI仪表盘都是用EXCEL做出来的?!
    引言现在大家都知道数据可视化、数据看板,几乎每个公司部门都有仪表盘的需求。近年来,学习可视化软件的人也越来越多,国外Tableau、PowerBI就是这一领域的领先者,而国内也有不少厂家在研发数据可视化软件,比如帆软是目前国内做的比较好,同时网易、腾讯等大厂也有在推出自己的可......
  • Java面试进阶指南:高级知识点问答精粹(二)
    Java面试问题及答案1.什么是Java内存模型(JMM)?它在并发编程中扮演什么角色?答案:Java内存模型(JMM)是一个抽象的模型,它定义了Java程序中各种变量(线程共享变量)的访问规则,以及在并发环境下这些变量如何被不同线程所看到。JMM规定了主内存和工作内存的概念,以及它们之间的交互规......
  • Java面试进阶指南:高级知识点问答精粹(一)
    Java面试问题及答案1.什么是Java中的集合框架?它包含哪些主要接口?答案:Java集合框架是一个设计用来存储和操作大量数据的统一的架构。它提供了一套标准的接口和类,使得我们可以以一种统一的方式来处理数据集合。集合框架主要包含以下接口:Collection:最基本的集合接口,它是......
  • uniapp中,首先显示一个大的地图,点击地图上的点,缩小地图并且在下方显示地图上的点对应的
    <template><viewclass="content"><mapid="map":style="{width:'100%',height:selectedMarker.title?'50vh':'76vh',zIndex:'500'}":markers="markers&quo......