微信小程序通过 node 连接 mysql——方法,简要原理,及一些常见问题

article/2025/10/23 5:14:27

前言

博主自己在22年夏天根据课程要求做了一个小程序连接阿里云服务器的案例,在最近又碰到了相应的需求。

原参考文章:微信小程序 Node连接本地MYSQL_微信小程序nodejs连接数据库_JJJenny0607的博客-CSDN博客 ,还请多多支持原作者!

第二次尝试的时候已经熟练许多了,但是还是遇到了很多挺烦人的问题,也浪费了很多时间排查 bug。因此博主打算趁着刚做过记忆还深刻的时候,把全过程、博主自己的理解和遇到的一些问题的解决方法整理出来。当然我也不可能能解决所有问题,遇到的部分问题也只是针对我自己的情况可以解决。因此如果 solutions 不起效或遇到其他问题,可以在评论区留言,我会与大家沟通(不保证能否解决~)。

原理

55ff06e4153087c9216fd7b56763ea7

nodejs 作为中介服务器,可以让小程序连接 mysql 数据库。

步骤

如果不出错误的话, 基本流程就是跟着上面的文章来的。

  1. 下载 node。可以在 cmd 中输入 node -v 查看有无成功下载。

    image-20230302134251274

  2. 新建一个数据库,这一部分很简单,有 mysql 相关基础的读者应该没问题,也可以看博主的 mysql 专栏学习。

  3. 新建一个小程序,在结构中新建 server 文件夹用于存储 node 本地服务器相关代码。

    image-20230302135701456

  4. 右键 server 文件夹,点击“在内建终端中打开”,安装一些所需的包。

npm init -y
npm i mysql --save-dev
npm install body-parser --save-dev
npm install express --save-dev
  1. 在文件夹下新建 server.js 文件,编写代码。
const express=require('express')
const bodyParser =require('body-parser')
const app=express()
const mysql = require('mysql')
const IPAddress='[你的数据库地址]'//因为这里是要链接远程数据库,ip 地址是 mysql 的地址!!本地就是 127.0.0.1,服务器上就自己找找看
const UserName='[mysql 用户名]'
const PWD='[mysql 密码]'
const DBName='[要操作的数据库名]'
app.use(express.json())
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: false }))
//这上面一段固定的,[] 的部分需要根据自己数据库的信息修改//处理get请求。这里是一个 get 请求的方法演示,作用是查询 table1 表中的所有数据并返回。
app.get('/getUser',(req,res)=>{ //这里的是 get 方法 getUser,对应了刚才的页面发来的请求。就会执行这个方法。//参数传入是在 req.body 对象里面。比如上面的语句是获取传入的 openid 变量,并且我们新定义一个叫 openid 的变量存储传入的 openid 变量var connection=mysql.createConnection({host:IPAddress,port: 3306,		//端口号,mysql 固定3306user:UserName,password:PWD,database:DBName})//配置连接的属性connection.connect();//尝试连接connection.query("select * from table1",function(error,results,fields){//执行查找语句if(error) console.log(error);//执行失败的话res.json(results)console.log(results)})connection.end();//断开连接})app.listen(3000,()=>{//这是一个监听端口,会输出监听到的信息。上面的 console.log 就会在这里输出console.log('server running at http://'+IPAddress+':3000')
})

我们的 nodejs 是部署在本地的,就在 server 文件夹里。node_modules 是下载的 nodejs 包,server.js 是我们的操作 nodejs 的代码。

我们在需要调用数据库的页面里先调用本地服务器,比如在 mysqlTest.js 中,onLoad 里:

onLoad() {//我们写一个调用数据库函数,使得本页面加载时调用此函数,查找 youqi.data 里的所有条目。wx.request({method: 'GET',//这里要和 server.js 定义的 post or get 一致!!!url: 'http://[本地 IPV4 地址]:3000/getUser',//这里的 ip 地址不是数据库的地址,而是你的电脑本地的地址,因为这一步的操作是要找到本地 nodejs 服务器。getUser 要和 server.js 中定义的方法名一致。data: {//这里面是传入参数。比如我们要 select * from data where openid= 给定的 openid,就可以从这里传入},success: function (res) {//成功获取到值,返回一个 res 对象。如果不知道 res 对象里面包含什么,可以先输出 res 对象看一下其中都包含什么console.log(res);},fail: function () {//没有获取到值,说明这中间出问题了。console.log("获取失败");}})},

本地 IPV4 地址是怎么查出来的?打开 cmd,输入 ipconfig。无线局域网适配器 WLAN 里的 IPV4 即是。

nodejs 接收到了请求,就会执行 server.js 里对应的方法。

如何运行

首先 nodejs 服务器需要手动开启,我还不会自动开启。

右键 server 文件夹,在内建终端中打开,然后在终端中输入:

image-20230227001627448

下面那句话说明正常启动服务器并且开始监听。

我们输出一下 res,看看成功会返回什么信息。调试器里的 console 输出:

image-20230227000549916

data 里是我们数据库的查询结果。

image-20230227000639178

res.data 获取这个15长度的 Array。

image-20230227000715899

然后比如我们要获取其中的 time 值,就是 res.data[0].time, res.data[1].time… res.dat[14].time。

{} 表示其中是一个对象变量,通过句号+索引名称获取特定的值。

而刚才的一直在监听的内建终端里输出:

image-20230302140540514

这个的输出对应 function(error,results,fields) 里的 console.log(results)。如果查询失败,error 也是在这个内建终端里输出。

常见问题

数据库无法连接?

建好数据库后,最好就先用 cmd 或 workbench 连接一下试试。如果能成功连接并查询,之后出问题也可以排除 mysql 的一部分问题。

如果采用云服务器(如阿里云)连接不上,可能的问题有:

  • 服务器端口 80 和 3306 没开。(不建议一键全部放行,有被hacker get 的风险)
  • mysql 需要有一个用户能在所有 ip 地址里对该数据库进行读写操作,这里可以参考 DCL 的内容来新建符合要求的 user。Mysql_9 SQL 语句——DCL_sql语言dcl_灰海宽松的博客-CSDN博客
  • 服务器防火墙的问题,要开启3306端口。

image-20230302141204512

小程序报错 ERR TIMEOUT

打开网站可以看到 404 显示。

  • 首先先确保前面那个问题确实解决了,该数据库确实可以从本地连接,,不是数据库的问题。

  • 再确认 get post 方法是否对应,方法名是否写错。很多时候输入了错误的链接也会显示 404.

  • 小程序不校验合法域名是否打开。

  • 启用或关闭 windows 功能——Internet Information Services,及其可承载 web 核心,子项全部打开。点击确定。如果成功启动,在浏览器中输入 127.0.0.1,应该可以看到:

    image-20230302141638928

  • 检查方法名,get post 类别是否写错。


http://chatgpt.dhexx.cn/article/I90CwcS1.shtml

相关文章

php脚本连接mysql,微信小程序连接数据库。

最近我在做一个微信小程序,其中有一个页面,页面里面需要连接我的后台数据库,把用户数据传递到我的MySQL数据库中。 最初,我在网上找了很多东西,发现并没有一个特别详细明确的教程,其中大多数都只是把他的代…

matlab画图标签,Matlab绘图

要使用plot函数来绘制图形,需要执行以下步骤: 通过指定要绘制函数的变量x的值的范围来定义x。 定义函数,y = f(x) 调用plot命令,如下:plot(x,y) 以下示例将演示该概念。下面绘制x的值范围是从0到100,使用简单函数y = x,增量值为5。 创建脚本文件并键入以下代码 - x = […

MATLAB入门与作图

MATLAB 一、变量与函数 1、变量 (1)变量名区分大小写 (2)变量名必须以字母开头,之后可以是任意字母、数字或下划线,不允许使用标点符号。 2、特殊变量 ​ pi 圆周率 3、标点符号 ​ 1、每条命令&am…

JAVA实现聊天室(局域网)

JAVA用局域网实现聊天室 类和接口 Server类(服务器端) package Test;import java.io.IOException; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket;public class Server {private static final int SERVER_PORT30…

Java在线聊天室课程设计(嘉然UI界面)

文章目录 一、前言 😆二、效果展示图 🧐1、服务器界面2、客户端登录界面3、聊天界面 三、客户端Client 🙂1、LoginFrame类2、ClientHandler类3、ChatFrame类 四、服务器端Server 🙃1、ServerFrame类2、ServerInfoPanel类3、Online…

java聊天室源代码(练习项目)

聊天室界面如下: 聊天室源代码链接 一、服务端: 窗体: package sonyi.server;import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import jav…

Java—简易聊天室

Java—聊天室的实现 在学习了IO流,多线程以及网络编程的知识之后,我们可以利用所学到的知识做一个小项目,这里我做了一个多人聊天室,实现了群聊和私聊功能,看完分享之后也可以自己去做一个练练手。 首先是整个项目的…

java聊天室(实训项目)

这里是我们实训的一个关于java聊天室的项目,有需要的同学可以看看,私聊功能未完善。 话不多说,直接上代码。 服务器: package ChatRoom;import java.awt.Color; import java.awt.Component; import java.awt.EventQueue; impor…

Java实现简易聊天室

Java实现简易聊天室 在学习《Java从入门到精通》这本书,网络通信,基于TCP实现的简易聊天室,我这里对书中的代码略做了修改,做个记录。 这里先放一下运行效果图,代码放在最后。 运行效果: 先启动服务器端&am…

javaWeb实现聊天室(私聊+群聊)

写在前面 近几天,迎来了第一个小项目,不做不知道,一做吓一跳。好多知识都掌握的不够扎实,看似会了,但其实似懂非懂,不能真正掌握原理,导致使用起来错误百出。而且深深体会到,知识只有…

java实现聊天室(GUI界面+私聊+群聊)

登录界面的用户名和端口号不能重复! 登录界面的用户名和端口号不能重复! 登录界面的用户名和端口号不能重复! java的socket编写的聊天室,GUI的界面,可以私聊和群聊, 聊天信息保存为txt 有需要的可以自行下…

用Java代码实现一个简单的聊天室功能

一.客户端的创建 1.我们可以用Socket来创建客户端 /***类名 Client*描述 TODO 客户端 1*版本 1.0*创建人 XuKang*创建时间 2020/9/24 16:18**/ public class Client {public static void main(String[] args) throws UnknownHostException, IOException {System.out.println(…

Java在线聊天室(客户端+服务器)

Java在线聊天室(客户端服务器)基于webSocket实现模拟在线聊天系统 运行环境: JDK1.8version 开发环境:Eclipse 一、结构 以下是系统主要结构: 1.用户(均实现部分可能会有bug) (…

apiDay09整理笔记(笔记优化)

目录 1.聊天室(续) (1)实现服务端发送消息给客户端 (2)服务端转发消息给所有客户端 (3)客户端解决收发消息的冲突问题 (4)服务端完成处理客户端断开连接…

JAVA简单聊天室的实现

目录 界面效果图 一、聊天室功能介绍? 二、功能代码 1.服务端 2.客户端 界面效果图 提示:以下是本篇文章正文内容,下面案例可供参考 一、聊天室功能介绍? 1. 、对于聊天室就是处理多个客户端发送的请求与信息,从…

Java网络聊天室---个人博客

Java网络聊天室 ———个人博客 一、项目简介 功能描述: 使用图形用户界面和socket通信,能实现一个聊天室中多人聊天,可以两人私聊,可以发送文件。 实现类似QQ用户注册、登录、聊天等功能。 参考git地址或博客地址&#xff1a…

Java实现ChatRoom

基于连接通信Socket、多线程的Java聊天室 1、开发环境: IDEA2018.1JDK1.8 2、实现功能: 实现了模拟登录注册、群聊、私聊、显示当前在线人数列表; 在发送信息时,会向对方发送者及显示发送时间; 显示在线人数列表…

Java聊天室

项目介绍: Java聊天室是期末设计, 阿里巴巴druidmysql多线程GUImvn项目java Socket 服务端模块:踢出聊天室:管理员可以踢出发言不当的用户。只有当开启服务端的时候,客户端才能起到作用。 客户端模块: 注册…

用Java实现简易聊天室

说明:如果一个 类,需要有界面的显示,那么该类就需要继承自JFrame,此时,该类就可以被称为一个“窗体类"。 服务端代码: package cn.qy.chat;import javax.swing.*; import java.awt.*; import java.aw…

微信小程序购物车功能实现(干货满满)

微信小程序定制好看的购物车页面,实现购物车功能,希望对您有所帮助! 1. 应用场景 2. 思路分析 3. 代码分析 4. 具体实现代码 效果截图: 1.应用场景 适用于商城、秒杀、商品购买等类型的小程序,负责将顾客浏览的商…