微信小程序通过 node 连接 mysql——方法,简要原理,及一些常见问题
前言
博主自己在22年夏天根据课程要求做了一个小程序连接阿里云服务器的案例,在最近又碰到了相应的需求。
原参考文章:微信小程序 Node连接本地MYSQL_微信小程序nodejs连接数据库_JJJenny0607的博客-CSDN博客 ,还请多多支持原作者!
第二次尝试的时候已经熟练许多了,但是还是遇到了很多挺烦人的问题,也浪费了很多时间排查 bug。因此博主打算趁着刚做过记忆还深刻的时候,把全过程、博主自己的理解和遇到的一些问题的解决方法整理出来。当然我也不可能能解决所有问题,遇到的部分问题也只是针对我自己的情况可以解决。因此如果 solutions 不起效或遇到其他问题,可以在评论区留言,我会与大家沟通(不保证能否解决~)。
原理
nodejs 作为中介服务器,可以让小程序连接 mysql 数据库。
步骤
如果不出错误的话, 基本流程就是跟着上面的文章来的。
-
下载 node。可以在 cmd 中输入
node -v
查看有无成功下载。 -
新建一个数据库,这一部分很简单,有 mysql 相关基础的读者应该没问题,也可以看博主的 mysql 专栏学习。
-
新建一个小程序,在结构中新建 server 文件夹用于存储 node 本地服务器相关代码。
-
右键 server 文件夹,点击“在内建终端中打开”,安装一些所需的包。
npm init -y
npm i mysql --save-dev
npm install body-parser --save-dev
npm install express --save-dev
- 在文件夹下新建 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 文件夹,在内建终端中打开,然后在终端中输入:
下面那句话说明正常启动服务器并且开始监听。
我们输出一下 res,看看成功会返回什么信息。调试器里的 console 输出:
data 里是我们数据库的查询结果。
res.data 获取这个15长度的 Array。
然后比如我们要获取其中的 time 值,就是 res.data[0].time, res.data[1].time… res.dat[14].time。
{} 表示其中是一个对象变量,通过句号+索引名称获取特定的值。
而刚才的一直在监听的内建终端里输出:
这个的输出对应 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端口。
小程序报错 ERR TIMEOUT
打开网站可以看到 404 显示。
-
首先先确保前面那个问题确实解决了,该数据库确实可以从本地连接,,不是数据库的问题。
-
再确认 get post 方法是否对应,方法名是否写错。很多时候输入了错误的链接也会显示 404.
-
小程序不校验合法域名是否打开。
-
启用或关闭 windows 功能——Internet Information Services,及其可承载 web 核心,子项全部打开。点击确定。如果成功启动,在浏览器中输入 127.0.0.1,应该可以看到:
-
检查方法名,get post 类别是否写错。
相关文章:

微信小程序通过 node 连接 mysql——方法,简要原理,及一些常见问题
前言 博主自己在22年夏天根据课程要求做了一个小程序连接阿里云服务器的案例,在最近又碰到了相应的需求。 原参考文章:微信小程序 Node连接本地MYSQL_微信小程序nodejs连接数据库_JJJenny0607的博客-CSDN博客 ,还请多多支持原作者! 第二次…...

uni-app项目搭建和代码托管
文章目录一、项目搭建步骤一、HBuilder X 创建uniapp项目步骤二、开启微信小程序服务端口步骤三、把项目运行到微信小程序步骤四、解决警告二、使用Git管理项目2-1、本地管理2-2、托管到码云一、项目搭建 步骤一、HBuilder X 创建uniapp项目 步骤二、开启微信小程序服务端口 步…...

win10+python3.6+cuda9+pytorch1.1.0安装
为了让torch可以使用显卡GPU加速,需要安装对应版本的cudatoolkit和pytorch。这里我的nvidia显卡驱动是9.1版本,只能安装cudatoolkit9。 一般支持gpu加速的显卡大部分都是英伟达nvidia系列,都自带了nvidia驱动,所以不需要安装nvidi…...

【2023】某python语言程序设计跟学第二周内容
本文说明: 案例内容为北理工python语言程序设计课程,如有不妥请联系! 目录蟒蛇绘制案例:执行结果:代码分析:举一反三:绘制一个五角星图案执行结果:turtle库根据案例简单说明…...

spring源码篇——BeanDefinition的注册
spring-framework 版本:v5.3.19 文章目录注解方式(AnnotationConfigApplicationContext)AnnotationConfigApplicationContext#registerAnnotatedBeanDefinitionReader#doRegisterBeanBeanDefinitionRegistry#registerBeanDefinitionAnnotatio…...

virtualbox7虚拟机中安装苹果macOS big sur系统详细教程
第1步,在 Windows 10/11 PC 上启用虚拟化。 现在的电脑一般都默认开启虚拟化技术了。 如果你遇到一些报错,比如收到错误消息“无法在虚拟机上打开会话”,可以查看 如果没有遇到问题,可以直接进入到第二步。 第2步,在…...

用spectralayers 简单去一下人声做个伴奏
最近有个同事说有个工作要一个歌的伴奏不会下载问我能不能给下一个。问题是我五音不全,也不咋关注伴奏这方面的事儿,然后巧了,当天晚上就有个网上的大哥在群里聊天的时候说有个去人声比较给力的软件,我马上给要来了。 软件叫啥sp…...
高峰对话|深度探讨「多云与边缘」
2022 年 12 月,分析师 Zeus Kerravala 与 VMware 通信运营商和边缘事业部高级副总裁兼总经理 Sanjay Uppal 进行非常有启发性的谈话,分享了科技行业领导者的见解。 二位主要围绕以下主题进行探讨: 📍 如何定义多云,以…...
开发手册——一、编程规约_2.常量定义
这篇文章主要梳理了在java的实际开发过程中的编程规范问题。本篇文章主要借鉴于《阿里巴巴java开发手册终极版》 下面我们一起来看一下吧。 1. 【强制】不允许任何魔法值(即未经定义的常量)直接出现在代码中。 反例:String key "Id#…...

Sandstorm 建设者亮点——2023 年 2 月
隆重推出 Sandstorm 建设者亮点——2023 年 2 月版,这是由最厉害的 Sandstorm 社区制作的独一无二的 NFT 系列。 从突破性的兔子机器人到神奇的蒸汽朋克海盗船,Sandstorm 建设者亮点 NFT 系列展示了一系列独一无二的创作。 19 项新资产将添加至 Sandstor…...

MyBatis快速入门
创建表(自行完成)创建模块,引入坐标(1).进入mybatis官网:MyBatis中文网按步骤进行添加坐标先添加mybatis依赖然后手动添加mysql驱动junit单元测试坐标:logback坐标:用的时候直接复制…...
Mysql的一些提权方式(mysql提权、UDF)
目录 bash命令提权 必要条件 实验 UDF提权 什么是UDF 必要条件 实验 手动测试...
【2023】DevOps、SRE、运维开发面试宝典之Docker相关面试题
文章目录 1、docker的工作原理是什么2、docker的组成包含哪几大部分3、讲一下镜像的分层结构以及为什么要使用镜像的分层结构?4、简单描述一下Dockerfile的整个构建镜像过程?5、Docker的四种网络类型?6、Docker跨宿主机通讯的方式1、docker的工作原理是什么 docker是一个Cl…...

圣杯布局的实现方式
1.什么是圣杯布局? 左右盒子固定,中间盒子自适应 2.实现方式 (1)flex布局 思路:左右盒子给固定的宽高,中间盒子flex:1 <!DOCTYPE html> <html lang"en"> <head> <met…...
RecastDemo用法
这里写自定义目录标题recastnavigation介绍recastnavigation的内容RecastDemo安装RecastDemo介绍可配置参数合理的创建标题,有助于目录的生成如何改变文本的样式生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个…...

IIC总线式驱动开发(mpu6050)(二)
目录 六、I2C总线二级外设驱动开发方法 七、I2C总线二级外设驱动开发之名称匹配 1. i2c_register_board_info 2. i2c_new_device:明确二级外设地址的情况下可用 3. i2c_new_probed_device 八、I2C总线二级外设驱动开发之设备树匹配 六、I2C总线二级外设驱动开…...

盘点一下那些远程办公的神仙公司
其实远程办公已经有50多年的历史了,这几年,这种工作方式越来越受到大家的喜欢,对于员工来说,工作效率可以大幅提高,节省下来的通勤时间和成本,有更多的时间花在工作上。可以更好的平衡工作与生活。对于公司…...

Spring Cloud Alibaba全家桶(四)——微服务调用组件Feign
前言 本文小新为大家带来 微服务调用组件Feign 的相关知识,具体内容包含什么是Feign,Spring Cloud Alibaba快速整合OpenFeign,Spring Cloud Feign的自定义配置及使用(包括:日志配置、契约配置、自定义拦截器实现认证逻…...

安装pytorch
一、在anaconda中创建虚拟环境 打开Anaconda Prompt创建一个虚拟环境。比如要创建一个名字为pytorch的虚拟环境,可以如下输入。其中python3.7指定该虚拟环境的python版本号。 conda create -n pytorch python3.7 二、进入新创建的虚拟环境。 创建好虚拟环境后&a…...

自动化测试 Appium之Python运行环境搭建 Part2
环境部署 1、安装Android SDK 安装好后,配置ANDROID_HOME环境变量,设置为Android SDK安装路径(例中:D:\Program Files (x86)\Android\android-sdk) 2、安装其它SDK相关软件包 安装好Android SDK后,选择打开Android SDK Manager…...

【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
Monorepo架构: Nx Cloud 扩展能力与缓存加速
借助 Nx Cloud 实现项目协同与加速构建 1 ) 缓存工作原理分析 在了解了本地缓存和远程缓存之后,我们来探究缓存是如何工作的。以计算文件的哈希串为例,若后续运行任务时文件哈希串未变,系统会直接使用对应的输出和制品文件。 2 …...
Python学习(8) ----- Python的类与对象
Python 中的类(Class)与对象(Object)是面向对象编程(OOP)的核心。我们可以通过“类是模板,对象是实例”来理解它们的关系。 🧱 一句话理解: 类就像“图纸”,对…...
计算机系统结构复习-名词解释2
1.定向:在某条指令产生计算结果之前,其他指令并不真正立即需要该计算结果,如果能够将该计算结果从其产生的地方直接送到其他指令中需要它的地方,那么就可以避免停顿。 2.多级存储层次:由若干个采用不同实现技术的存储…...

【技巧】dify前端源代码修改第一弹-增加tab页
回到目录 【技巧】dify前端源代码修改第一弹-增加tab页 尝试修改dify的前端源代码,在知识库增加一个tab页"HELLO WORLD",完成后的效果如下 [gif01] 1. 前端代码进入调试模式 参考 【部署】win10的wsl环境下启动dify的web前端服务 启动调试…...