微信小程序与本地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 '用户的密码';
微信小程序连接MySQL数据库可以通过以下几个步骤实现注册登陆功能的代码。 首先,在小程序的app.js文件中进行数据库的配置。可以使用微信提供的wx.request()函数向服务器发送请求,并配置请求的header、method和data等参数。需要在服务器端进行数据库的操作,所以需要提供服务器的API接口。 其次,在小程序的pages文件夹中创建注册和登录页面。注册页面需要获取用户输入的注册信息,并通过wx.request()函数将信息传递给服务器API接口。在服务器端将接收到的注册信息存储到MySQL数据库中。登录页面同样需要获取用户输入的登录信息,并通过wx.request()函数将信息传递给服务器API接口进行验证。 接下来,在服务器端编写API接口的代码。通过接口的路由来处理注册和登录的请求。注册请求需要将接收到的数据插入到MySQL数据库的用户表中,可以使用MySQL的INSERT语句实现。登录请求需要查询用户表中是否存在匹配的用户名和密码,可以使用MySQL的SELECT语句实现。 最后,根据服务器返回的结果,在小程序中进行相应的处理。如果注册成功,可以给用户显示注册成功的提示,并跳转到登录页面。如果登录成功,可以给用户显示登录成功的提示,并跳转到其他页面。 需要注意的是,MySQL数据库连接的配置需要涉及小程序、服务器和数据库三个部分的配置,包括数据库的IP地址、端口号、用户名、密码等信息。此外,为了保证用户信息的安全,可以在通信过程中使用数据加密技术进行保护。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值