uni-app与java的交互且使用小米球Ngrok连接到手机微信小程序
上一篇已经将uni-app的单机登陆完成了:https://blog.csdn.net/qq_43222167/article/details/106562615
java交互后台响应
将login.vue修改(这里注意的是用户名和密码的值与后台的对应)
<template><view class="content"><view class="input-group"><view class="input-row border"><text class="title">账号:</text><m-input class="m-input" type="text" clearable focus v-model="userName" placeholder="请输入账号"></m-input></view><view class="input-row"><text class="title">密码:</text><m-input type="password" displayable v-model="password" placeholder="请输入密码"></m-input></view></view><view class="btn-row"><button type="primary" class="primary" @tap="bindLogin">登录</button></view><view class="action-row"><navigator url="../reg/reg">注册账号</navigator><text>|</text><navigator url="../pwd/pwd">忘记密码</navigator></view><view class="oauth-row" v-if="hasProvider" v-bind:style="{top: positionTop + 'px'}"><view class="oauth-image" v-for="provider in providerList" :key="provider.value"><image :src="provider.image" @tap="oauth(provider.value)"></image><!-- #ifdef MP-WEIXIN --><button v-if="!isDevtools" open-type="getUserInfo" @getuserinfo="getUserInfo"></button><!-- #endif --></view></view></view>
</template><script>import service from '../../service.js';import {mapState,mapMutations} from 'vuex'import mInput from '../../components/m-input.vue'export default {components: {mInput},data() {return {providerList: [],hasProvider: false,userName: '',password: '',positionTop: 0,isDevtools: false,}},computed: mapState(['forcedLogin']),methods: {...mapMutations(['login']),initProvider() {const filters = ['weixin', 'qq', 'sinaweibo'];uni.getProvider({service: 'oauth',success: (res) => {if (res.provider && res.provider.length) {for (let i = 0; i < res.provider.length; i++) {if (~filters.indexOf(res.provider[i])) {this.providerList.push({value: res.provider[i],image: '../../static/img/' + res.provider[i] + '.png'});}}this.hasProvider = true;}},fail: (err) => {console.error('获取服务供应商失败:' + JSON.stringify(err));}});},initPosition() {/*** 使用 absolute 定位,并且设置 bottom 值进行定位。软键盘弹出时,底部会因为窗口变化而被顶上来。* 反向使用 top 进行定位,可以避免此问题。*/this.positionTop = uni.getSystemInfoSync().windowHeight - 100;},bindLogin() {/*** 客户端对账号信息进行一些必要的校验。* 实际开发中,根据业务需要进行处理,这里仅做示例。*//* if (this.userName.length < 5) {uni.showToast({icon: 'none',title: '账号最短为 5 个字符'});return;}if (this.password.length < 6) {uni.showToast({icon: 'none',title: '密码最短为 6 个字符'});return;} *//*** 下面简单模拟下服务端的处理* 检测用户账号密码是否在已注册的用户列表中* 实际开发中,使用 uni.request 将账号信息发送至服务端,客户端在回调函数中获取结果信息。*/const data = {userName: this.userName,password: this.password};uni.request({url:"http://localhost:8080/order/userLogin",method:"POST",data:data,success: (res) => {console.log(res);}})/* const validUser = service.getUsers().some(function(user) {return data.userName === user.userName && data.password === user.password;});if (validUser) {this.toMain(this.userName);} else {uni.showToast({icon: 'none',title: '用户账号或密码不正确',});} */},oauth(value) {uni.login({provider: value,success: (res) => {uni.getUserInfo({provider: value,success: (infoRes) => {/*** 实际开发中,获取用户信息后,需要将信息上报至服务端。* 服务端可以用 userInfo.openId 作为用户的唯一标识新增或绑定用户信息。*/this.toMain(infoRes.userInfo.nickName);},fail() {uni.showToast({icon: 'none',title: '登陆失败'});}});},fail: (err) => {console.error('授权登录失败:' + JSON.stringify(err));}});},getUserInfo({detail}) {if (detail.userInfo) {this.toMain(detail.userInfo.nickName);} else {uni.showToast({icon: 'none',title: '登陆失败'});}},toMain(userName) {this.login(userName);/*** 强制登录时使用reLaunch方式跳转过来* 返回首页也使用reLaunch方式*/if (this.forcedLogin) {uni.reLaunch({url: '../main/main',});} else {uni.navigateBack();}}},onReady() {this.initPosition();this.initProvider();// #ifdef MP-WEIXINthis.isDevtools = uni.getSystemInfoSync().platform === 'devtools';// #endif}}
</script><style>.action-row {display: flex;flex-direction: row;justify-content: center;}.action-row navigator {color: #007aff;padding: 0 10px;}.oauth-row {display: flex;flex-direction: row;justify-content: center;position: absolute;top: 0;left: 0;width: 100%;}.oauth-image {position: relative;width: 50px;height: 50px;border: 1px solid #dddddd;border-radius: 50px;margin: 0 20px;background-color: #ffffff;}.oauth-image image {width: 30px;height: 30px;margin: 10px;}.oauth-image button {position: absolute;left: 0;top: 0;width: 100%;height: 100%;opacity: 0;}
</style>
发送请求到后台…
发生了这么一个错,这个错是跨域问题,我们在后端提供了两种解决办法
1.在你的控制层的类上面加
@CrossOrigin(value = {"*"})
表示可以接收所有的请求
修改后发送请求
2.加入CorsConfig文件到你发送请求的项目中(要被SpringBoot扫描到)
package com.jbit.util;import org.springframework.context.annotation.Configuration;
import org.springframework.format.FormatterRegistry;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.validation.MessageCodesResolver;
import org.springframework.validation.Validator;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.HandlerMethodReturnValueHandler;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.config.annotation.*;import java.util.List;@Configuration
public class CorsConfig implements WebMvcConfigurer {@Overridepublic void configurePathMatch(PathMatchConfigurer pathMatchConfigurer) {}@Overridepublic void configureContentNegotiation(ContentNegotiationConfigurer contentNegotiationConfigurer) {}@Overridepublic void configureAsyncSupport(AsyncSupportConfigurer asyncSupportConfigurer) {}@Overridepublic void configureDefaultServletHandling(DefaultServletHandlerConfigurer defaultServletHandlerConfigurer) {}@Overridepublic void addFormatters(FormatterRegistry formatterRegistry) {}@Overridepublic void addInterceptors(InterceptorRegistry interceptorRegistry) {}@Overridepublic void addResourceHandlers(ResourceHandlerRegistry resourceHandlerRegistry) {}@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedOrigins("*").allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS").allowCredentials(true).maxAge(3600).allowedHeaders("*");}@Overridepublic void addViewControllers(ViewControllerRegistry viewControllerRegistry) {}@Overridepublic void configureViewResolvers(ViewResolverRegistry viewResolverRegistry) {}@Overridepublic void addArgumentResolvers(List<HandlerMethodArgumentResolver> list) {}@Overridepublic void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> list) {}@Overridepublic void configureMessageConverters(List<HttpMessageConverter<?>> list) {}@Overridepublic void extendMessageConverters(List<HttpMessageConverter<?>> list) {}@Overridepublic void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> list) {}@Overridepublic void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> list) {}@Overridepublic Validator getValidator() {return null;}@Overridepublic MessageCodesResolver getMessageCodesResolver() {return null;}}
加入后发送请求
也已经得到
显示登陆成功的提示
只需要将success修改为
success: (res) => {console.log(res.data);let user=res.data;uni.showToast({icon:"success",title:"登陆成功,欢迎"+user.userName})this.login(user.userName)}
导入到微信小程序中使用
在HBuilder中的工具–>设置配置好微信小程序的路径
微信小程序中将代理打开
运行
等待加载成功
然后就可以在小程序中使用了
连接到手机(在微信小程序的真机调试中使用)
因为地址的原因,我们这里要使用到小米球Ngrok(内网穿透工具)
官网:http://ngrok.ciqiuwl.cn/
也可以在我的网盘中提取(我这里是windows64位操作系统的):链接:https://pan.baidu.com/s/1JbOVnnh8HLcBHxVCdsJNHw
提取码:p7sp
下载好之后对这个文件进行编辑
我们在这里只需要修改
这两个随意修改,只需要相同就好。还有一个
//对应的是你请求的端口号
proto:http: localhost:8080
修改好之后启动
输入第一步改的值
启动成功后复制值,这个代表的值为localhost:8080
放到HBuilder中(拼接出相应的请求路径)
一定要注意好url的地址正确,本人开始一直有个空格,导致一直发不出请求
微信小程序中点击
二维码出来后手机微信扫描后进入小程序登陆测试
在电脑的微信小程序启动的真机调试中也可以看到相应的值
uni-app与java的交互且使用小米球Ngrok连接到手机微信小程序相关推荐
- Java数字化智慧校园平台源码,智慧学校源码+微信小程序+人脸电子班牌
这是一套JAVA语言开发的智慧校园源码,有演示,有文档,源码完整开源,商用级别,可以私信博主. 技术开发环境:Java+springboot+vue+element-ui+mysql 用的是最新的技术 ...
- java线下IT培训机构平台ssm培训课程成绩管理系统微信小程序源码和论文
随着互联网的不断发展与微信及微信小程序的普遍应用,教育行业发生了重大变化,有关IT方面的线下培训机构也随之增加.如果线下IT培训机构可以利用线上管理取代传统的人工管理,那么将可以大大地降低工作量,提高 ...
- 【大白话学习】UniApp 微信小程序与APP应用 开发零基础入门教程(七)---登陆注销功能与微信小程序测试号的申请
到此为止,我们只差一个退出登陆功能了. 回到index.vue页面,之前我们已经预留了退出按钮,现在给它加上功能 <button class="mybutton" type= ...
- 毕业季基于spring的基于安卓APP的基于ssm框架的基于微信小程序的管理系统设计与开发(开题+源码+讲解+论文)
毕业设计考察的是同学的专业知识的运用能力,除了对技能的考核,还看重你的创新思维,这里面设计到内容繁琐复杂. 对于还未毕业没有过项目开发经验的同学是有些难度的,一个程序的开发小到1两个月,大至几个月甚至 ...
- 基于微信小程序菜谱查询app设计
设计一个基于微信小程菜单查询app,一共有2个身份包括用户和管理员!用户通过微信小程序打开app后可以查询最新上架的菜谱信息,查询和查看菜谱详情信息,收藏自己喜欢的菜谱,发布留言和查看新闻公告!管理员 ...
- 微信小程序项目实战+JAVA SSM框架后台管理系统
毕业设计做的是一个阅读微信小程序+后台管理系统 ,最后被评为优秀毕业设计,在此将项目源码及设计思路进行分享(文末含源码下载地址). 效果图如下: 一.系统开发环境 (1)Windows10操作系统 ( ...
- APP、微信小程序、网页H5
APP.微信小程序.网页H5之间区别 1.APP 使用条件:苹果要去app store搜索下载,安卓需要在各应用商店搜素下载 更新条件:如需要修改内容,需要通过第三方审核 应用场景:适用于有较大流量, ...
- 微信小程序解密用户信息--java解密
1.wx.login()方法获取code,通过code换取session_key 2.wx.getUserInfo()方法获取: encryptedData 包括敏感数据在内的完整用户信息的加密数据 ...
- java基本微信小程序的琴房预约管理系统 uniapp 小程序
随着国家高等教育事业的快速发展,各种高等院校招生规模不断地扩大,而现有的教学场地资源未能跟上招生规模扩大的节奏,从而导致了高校学生与其相配套的教学资源的矛盾越来越加剧. 并且,随着高校招生规模的扩大, ...
- java监听微信_一种基于java后台应用监控微信小程序的用户访问量的方法与流程...
本发明涉及java应用与微信小程序应用开发技术领域,具体涉及一种基于java后台应用监控微信小程序的用户访问量的方法. 背景技术: 微信小程序,简称小程序,是一种不需要下载安装即可使用的应用,它实现了 ...
最新文章
- Linux下Java Font 中文字体不显示
- 开发高性能JAVA应用程序基础(内存篇)
- SDH光端机概述与技术应用详解
- 部门年终总结大屏太难做?FVS开发模式用起来,附年终报告模板
- 大白话5分钟带你走进人工智能-第十九节逻辑回归之优化点(4)
- 使用Vivado保存仿真波形数据并读取
- Linux操作Oracle(9)——Oracle数据库导入导出方法详解 EXP IMP EXPDP IMPDP
- 老将回归,英特尔的复兴之路
- 机器学习的数学基础(一)—— 期望、方差、协方差与相关系数
- 【kali技巧】kali更新系统
- 京东架构专家分享京东架构之路
- 计算机屏幕分辨率设置,电脑怎么设置屏幕分辨率
- Python2020期末考试试题及答案
- 【ROS2原理11】C++编程的要点
- java程序调用时的调用规则,Java程序调用ILog规则出错
- Android获取NFC标签和NFC十进制16进制ID
- QS发布2021年世界大学排名!你报考的大学排第几?
- Win10电脑有网其他联网软件能正常使用但打不开浏览器怎么办?
- 互联网摸鱼日报(2022-09-16)
- CNSS数据与测量作业
热门文章
- 《OpenGL超级宝典第五版》Windows + VS2019配置
- OpenGL超级宝典(第7版)笔记22 原子计数器 清单5.31-5.34
- 爱企人事工资管理系统 v8.1 免费下载
- 机器学习基础知识(一):机器学习三大流派
- 电机学、电机拖动相关知识(试着更新电机的相关知识,感谢指出错误)
- 老毛桃u盘装系统linux,老毛桃如何安装iso系统_老毛桃u盘启动安装iso系统教程
- 基于单片机智能交通灯控制系统设计外文文献_1000多套机械专业毕业设计免费分享(论文+DWG图纸+外文翻译+文献综述+开题报告+答辩) 友图网...
- 工科生快速翻译英文文献的两个软件
- 新创建虚拟机如何配置ip地址
- 古代汉语(王力版)笔记 通论8-9