微信小程序与本地MySQL数据库通信

微信小程序与本地MySQL数据库通信

因为本地MySQL服务器没有域名,也没有进行相应的请求操作封装,因此微信小程序没办法和数据库通信。

但是对于开发人员来说,没有数据库,那还能干撒?虽然我尝试过用json-server,但是其功能效果令我深深折服,立刻扔进垃圾桶了。

所以逼迫我使用Node.js搭建HTTPS服务器,间接实现和MySQL服务器的通信。

一、搭建HTTP服务器

1.1 首先安装好Node.js
https://nodejs.org/en

打开上面网址你就可以看到下载按钮了,下载exe安装包后直接安装即可。

1.2 创建服务器的专属文件夹

在磁盘的任何位置随便创建一个吧(建议不要在C盘),比如我创建的文件夹路径:

D:\Software\LocalHTTPMysql
1.3 安装依赖项

打开控制台,进入上面创建的文件夹目录,然后依次运行以下命令:

  • 初始化服务器
npm init -y
  • 安装Express框架,用于快速创建HTTP服务器
npm install express --save
  • 安装nodemon监控文件修改
npm install nodemon -g
  • 安装mysql的软件包
npm install mysql --save

上述这些依赖的安装速度可能并不快,因此需要读者有足够的耐心等待。

1.4 创建服务器

在刚才的目录下创建一个后缀为.js的文件,用来存放服务器代码,代码内容如下:

const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const mysql = require('mysql');app.use(bodyParser.json()); // 解析JSON请求体// 创建数据库连接池
const pool  = mysql.createPool({host: 'localhost',user: 'root',password: 'Wrmmxf2wmzmfx1',database: 'mysql'
});// 处理GET请求的根路径,查询数据库并返回结果,显然为了请求的通用性,则我的查询语句由小程序端完整生成,服务端只负责查询语句的中转
app.get('/', (req, res) => {pool.query(req.query.query, (error, results, fields) => {if (error) {console.error(error);return res.status(500).send('Internal Server Error');}res.json(results); // 返回查询结果});
});// 处理POST请求,用于数据写入
app.post('/', (req, res) => {const { table, columns, values } = req.body; // 从请求体获取数据// 构建SQL插入语句const placeholders = columns.map(() => '?'); // 原数组映射为新数组,新数组的每个元素均为问号,使用问号作为占位符const sql = `INSERT INTO \`${table}\` (${columns.join(', ')}) VALUES (${placeholders.join(', ')})`;// 执行SQL插入语句pool.query(sql, values, (error, results, fields) => {// 返回插入错误的信息if (error) {console.error(error);return res.status(500).send('Database error');}//   返回提示信息res.status(201).json({ message: 'Data inserted successfully', insertId: results.insertId });});});// 启动服务器监听3000端口,并打印启动信息
app.listen(3000, () => {console.log('Server running at http://127.0.0.1:3000');
});

对于数据库的查询,由于查询语句复杂多样,灵活多变如果放在服务端进行处理,我个人觉得不太方便。

因此,查询语句我放在了微信小程序的后端生成,然后发起HTTP请求时,直接传到中转服务器,中转服务器直接传给MySQL服务器,最后中转服务器将数据库返回的结果直接返回到微信小程序后端即可。

对于数据库的写入,语句则比较单一,可以在服务器端完成。

发起写入请求时,我们将必要的参数(表名、插入字段,字段数据)传递给中转服务器即可,服务器能够自动完成相关语句的拼接。

1.5 启动服务器

在刚才的目录下执行以下命令完成启动:

node XXX.js

前面是命令,后面是服务器文件名,像这样:

D:\Software\LocalHTTPMysql>node server.js
Server running at http://127.0.0.1:3000

http://127.0.0.1:3000将作为请求的域名

二、微信后端发起通信请求

2.1 数据库查询
wx.request({url: 'http://127.0.0.1:3000/',method: "get",data: {query: "Your Selection Statement"},success: function (res) {console.log(res.data)}});

上面是完成查询操作的代码,query是查询语句,读者自行根据前端功能完成语句的生成。

res.data是数据库返回的数据

2.2 数据库写入
wx.request({url: 'http://127.0.0.1:3000/', method: "post",data: {table: "insert_test",columns: ["name", "age"],values: ["李华", 21]},success: function (res) {console.log(res.data)}});

此时请求体不太一样,我们给出了要插入的表名,字段名和数据。读者也应该如此完成数据的组织。

三、错误处理

3.1 域名不合法错误

我们的小程序在此阶段并不打算公开,因此不需要域名校验,直接给关掉即可:

在这里插入图片描述

3.2 数据库连接不上错误

有时可能出现如下报错:

Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol

此时,请你先用以下命令登录数据库:

mysql -u 用户名 -p;

接着输入密码完成登录。

然后,使用以下命令切换到你要使用的表名:

use xxx;

xxx是表名

最后一步,运行如下命令打开权限,你只需更改用户名用户名的密码那两个参数即可。

alter user '用户名'@'localhost' identified with mysql_native_password by '用户的密码';

接着输入密码完成登录。

然后,使用以下命令切换到你要使用的表名:

use xxx;

xxx是表名

最后一步,运行如下命令打开权限,你只需更改用户名用户名的密码那两个参数即可。

alter user '用户名'@'localhost' identified with mysql_native_password by '用户的密码';

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/872825.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

好用的AI搜索引擎

1. 360AI 搜索 访问 360AI 搜索: https://www.huntagi.com/sites/1706642948656.html 360AI 搜索介绍: 360AI 搜索,新一代智能答案引擎,值得信赖的智能搜索伙伴,为复杂搜索提供专业支持,解锁更相关、更全面的答案。AI…

探索Facebook的最新更新:社交体验的新高度

Facebook作为全球领先的社交媒体平台,一直致力于不断创新和改进,以提供更优质的用户体验。近期,Facebook推出了一系列新的更新,旨在提升用户的社交互动体验和平台功能。本文将详细探讨这些最新更新,分析其对用户和社交…

如何用AI交互数字人一体机,打造政务服务新名片?

如今,将“高效办成一件事”作为优化政务服务、提升行政效能的重要抓手,各地方为了促进政务服务由传统模式向数字化、智能化方向转变,纷纷在政务服务场景融合了AI交互数字人,实现“无人化、智慧化”导办、帮办、代办等模式&#xf…

Apache AGE的MATCH子句

MATCH子句允许您在数据库中指定查询将搜索的模式。这是检索数据以在查询中使用的主要方法。 通常在MATCH子句之后会跟随一个WHERE子句,以添加用户定义的限制条件到匹配的模式中,以操纵返回的数据集。谓词是模式描述的一部分,不应被视为仅在匹…

3D问界—在MAYA中使用Python脚本进行批量轴居中

问题提出:MAYA中如何使用Python脚本 今天不是一篇纯理论,主要讲一下MAYA中如何使用Python脚本,并解决一个实际问题,文章会放上我自己的代码,若感兴趣欢迎尝试,当然,若有问题可以见文章末尾渠道&…

分布式IO系统2通道串口通信模块M602x

现场总线耦合器本身包含一个电源模块,它有 2 个串口通道,通过 Modbus RTU(Master)协议连接外部串行设备,实现耦合器与外部串行设备通信,现以连接设备的示例带大家了解我们钡铼的2 通道串口通信模块 M602x。…

【BUG】已解决:Uncaught SyntaxError: Unexpected token ‘<‘

已解决:Could not install packages due to an EnvironmentError: [Errno 13] Permission denied 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷分享知识,武汉城市开发者社区主理人 …

Neither the JAVA_HOME nor the JRE_HOME environment variable is defined问题解决

一、系统环境变量中添加tomcatjdk的环境变量声明 1、右击此电脑->属性->高级系统设置 可复制粘贴下面的变量名 CATALINA_HOME 点击path->编辑->新建 可将下面值粘入 %CATALINA_HOME%\bin 2、配置jdk的系统变量 系统变量->新建->如图 可将下面变量名粘入 J…

Flutter热更新技术探索

一,需求背景: APP 发布到市场后,难免会遇到严重的 BUG 阻碍用户使用,因此有在不发布新版本 APP 的情况下使用热更新技术立即修复 BUG 需求。原生 APP(例如:Android & IOS)的热更新需求已经…

LabVIEW 与 PLC 通讯方式

在工业自动化中,LabVIEW 与 PLC(可编程逻辑控制器)的通信至关重要,常见的通信方式包括 OPC、Modbus、EtherNet/IP、Profibus/Profinet 和 Serial(RS232/RS485)。这些通信协议各有特点和应用场景&#xff0c…

@google/model-viewer 导入 改纹理 (http-serve)

导入模型 改纹理 效果图 <template><div><h1>鞋模型</h1><model-viewerstyle"width: 300px; height: 300px"id"my-replace-people"src"/imgApi/Astronaut.glb"auto-rotatecamera-controls></model-viewer>&…

C++STL---priority_queue知识总结及模拟实现

前言 和stack与queue一样&#xff0c;priority_queue也是一种容器适配器。 他的本质其实是堆&#xff0c;作优先级队列的底层需要能够通过随机迭代器访问&#xff0c;所以他的底层是可以由vector和queue实例化&#xff0c;默认情况下priority_queue默认是用vector作为底层实例…

智慧博物馆的“眼睛”:视频智能监控技术守护文物安全与智能化管理

近日&#xff0c;位于四川德阳的三星堆博物馆迎来了参观热潮。据新闻报道&#xff0c;三星堆博物馆的日均参观量达1.5万人次。随着暑假旅游高峰期的到来&#xff0c;博物馆作为重要的文化场所&#xff0c;也迎来了大量游客。博物馆作为文化和历史的重要载体&#xff0c;其安全保…

关于vue实现导出excel表,以及导出的excel后的图片超过单元格的问题

实现导出带图标片的excel的方法&#xff0c; 首先&#xff1a; import table2excel from js-table2excel // 导出表格 按钮点击后触发事件 const onBatchExport () > {const column [//数据表单{title: "ID", //表头名称titlekey: "id", //数据ty…

通用图形处理器设计GPGPU基础与架构(四)

一、前言 本文将介绍GPGPU中线程束的调度方案、记分牌方案和线程块的分配与调度方案。 二、线程束调度 在计算机中有很多资源&#xff0c;既可以是虚拟的计算资源&#xff0c;如线程、进程或数据流&#xff0c;也可以是硬件资源&#xff0c;如处理器、网络连接或 ALU 单元。调…

Visual Studio2022中使用.Net 8 在 Windows 下使用 Worker Service 创建守护进程

Visual Studio2022中使用.Net 8 在 Windows 下创建 Worker Service 1 什么是 .NET Core Worker Service1.1 确认Visual Studio中安装了 ASP.NET和Web开发2 创建 WorkerService项目2.1 新建一个WorkerService项目2.2 项目结构说明3 将应用转换成 Windows 服务3.1 安装Microsoft.…

前端书籍翻页效果

目录 前端书籍翻页效果前言代码示例创建模板页面css样式编写js代码 结论 前端书籍翻页效果 前端实现翻书效果&#xff0c;附带vue源码 源码下载地址 前言 实际业务开发中&#xff0c;有时候会遇到需要在前端页面内实现翻书效果的需求&#xff0c;本篇文章就为大家介绍如何使…

09 深度推荐模型演化中的“平衡与不平衡“规律

你好&#xff0c;我是大壮。08 讲我们介绍了深度推荐算法中的范式方法&#xff0c;并简单讲解了组合范式推荐方法&#xff0c;其中还提到了多层感知器&#xff08;MLP&#xff09;。因此&#xff0c;这一讲我们就以 MLP 组件为基础&#xff0c;讲解深度学习范式的其他组合推荐方…

电子设备中丝杆模组高精度重复定位技术的原理!

丝杆模组是由螺旋丝杆和导杆组成的一种机械运动控制系统&#xff0c;通过在导杆内进行旋转&#xff0c;使导杆沿着线性方向进行移动&#xff0c;从而实现机械运动的线性控制。丝杆模组以其高精度、高稳定性和可重复定位的特性&#xff0c;在现代工业自动化和精密制造领域发挥着…

controller-from表单1

mvc模式是spring boot 开发web应用程序主要使用模式&#xff0c;mvc分别代表model模型&#xff0c;view是视图 &#xff0c;controller是控制器 controller是对接用户请求数据调用服务层代码&#xff0c;具体怎么操作 浏览器发送http请求给到dispatcherServlet&#xff08;前…