当前位置: 首页 > news >正文

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

前言

博主自己在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 类别是否写错。

相关文章:

微信小程序通过 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库根据案例简单说明&#xf…...

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.什么是圣杯布局&#xff1f; 左右盒子固定&#xff0c;中间盒子自适应 2.实现方式 &#xff08;1&#xff09;flex布局 思路&#xff1a;左右盒子给固定的宽高&#xff0c;中间盒子flex:1 <!DOCTYPE html> <html lang"en"> <head> <met…...

RecastDemo用法

这里写自定义目录标题recastnavigation介绍recastnavigation的内容RecastDemo安装RecastDemo介绍可配置参数合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个…...

IIC总线式驱动开发(mpu6050)(二)

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

盘点一下那些远程办公的神仙公司

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

Spring Cloud Alibaba全家桶(四)——微服务调用组件Feign

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

安装pytorch

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

自动化测试 Appium之Python运行环境搭建 Part2

环境部署 1、安装Android SDK 安装好后&#xff0c;配置ANDROID_HOME环境变量&#xff0c;设置为Android SDK安装路径(例中&#xff1a;D:\Program Files (x86)\Android\android-sdk) 2、安装其它SDK相关软件包 安装好Android SDK后&#xff0c;选择打开Android SDK Manager…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...