微信小程序:基于MySQL+Nodejs的汽车品牌管理系统

        各位好,接上期,今天分享一个通过本地MySQL+Nodejs服务器实现CRUD功能的微信小程序,一起来看看吧~

干货!微信小程序通过NodeJs连接MySQL数据库icon-default.png?t=N7T8https://jslhyh32.blog.csdn.net/article/details/137890154?spm=1001.2014.3001.5502

目录

前言 

一.Mysql数据库准备

二.新建项目

三.CRUD分别对应的前端

四.Nodejs后端代码

五.功能测试


前言 

  • 前端:原生微信小程序
  • 后端:Nodejs服务器
  • 数据库:MySQL8.0.35

        本帖只是一个在技术角度攻坚克难的整理总结,并不是可以直接拿出手的高大上项目,不过只要底层原理清楚,修改前端还是很容易的——即本帖提供一个微信小程序版CRUD系统的框架,大家可以自行改善!博主最近忙着冲毕设,之后要是有时间,回来分享一个升级版。


一.Mysql数据库准备

没什么好说的,先建一张表:

use db2;
create table car(id int comment '序号',name char(5) comment '品牌',country varchar(5) comment '国籍',description text comment '英文名'
);

然后直接用可视化工具录入如下数据:

 

二.新建项目

        新建一个项目,删除掉模版的全部代码,分别定义4个页面:select、add、update、drop。此外,记得创建名为Server的文件夹~ 

另外,本项目没有设置跳转函数、tabbar等功能,大家自行改变编译路径即可跳转~

三.CRUD分别对应的前端

1.查(select)

结构及样式如下:

<view><view id="look"><text style="font-size: 55rpx;">查询功能实现:</text></view><form bindsubmit="submit"><view class="select"><input id="input" name="name" type="text"  placeholder="请输入品牌名"/><button form-type="submit" id="btn">搜索</button></view></form><view id="result"><text>国籍:</text><textarea name="" id="out" cols="30" rows="10">{{text[0].country}}</textarea><text>全名:</text><textarea name="" id="out" cols="30" rows="10">{{text[0].description}}</textarea></view>
</view>
textarea{height: 50rpx;width: 100%;
}
#look{margin-top: 20px;margin-bottom: 20px;
}
#input{border: 1px solid gray;
}
#btn{margin-top: 10px;
}
#out{border: 1px solid gray;
}
#bottom{margin-top: 50px;
}
#result{margin-top: 20px;
}

 完整的JavaScript代码:


Page({data: {text:{}},onLoad: function (options) {},onReady: function () {},onShow: function () {},onHide: function () {},onUnload: function () {},onPullDownRefresh: function () {},onReachBottom: function () {},onShareAppMessage: function () {},//查询
submit:function(e){var that=thiswx.request({method:'POST',data:e.detail.value,url: 'http://127.0.0.1:3000/select',success:function(res){// console.log(res.data)that.setData({text:res.data})}})
}
})

2.删(drop)

<view><view id="look"><text>根据名字删除!</text></view><form bindsubmit="submit"><view class="select"><input id="input" name="name" type="text"  placeholder="品牌"/><button form-type="submit" id="btn">删除</button></view></form><view id="result"><text>搜索结果:</text><textarea name="" id="out" cols="30" rows="10">{{text[0].description}}</textarea></view>
</view>

wxss基本上都一样,用上一个就行~

submit:function(e){var that=thiswx.request({method:'POST',data:e.detail.value,url: 'http://127.0.0.1:3000/drop',success:function(res){// console.log(res.data)that.setData({text:res.data})}})
}

 其他部分的JavaScript也一样,这里仅给出绑定了“删除”按钮的函数。

3.增(add)

<view><view id="look"><text>增加一个数据~</text></view><form bindsubmit="add"><view class="select"><input id="input" name="id" type="number"  placeholder="id"/><input id="input" name="name" type="text" placeholder="名字" /><input id="input" name="country" type="text" placeholder="国籍" /><input id="input" name="description" type="text" placeholder="全名" /><button form-type="submit" id="btn">增加</button></view></form>
</view>
add:function(e){var that=thisconsole.log(e.detail.value.name)wx.request({method:'POST',data:{id:e.detail.value.id,name:e.detail.value.name,country:e.detail.value.country,description:e.detail.value.description},url: 'http://127.0.0.1:3000/add',success:function(res){that.setData({text:res.data})}})
}

4.改(update)

<view><view id="look"><text>修改一个数据~</text></view><form bindsubmit="update1"><view class="select"><input id="input" name="name" type="number"  placeholder="名字"/><input id="input" name="id" type="number"  placeholder="id"/><button form-type="submit" id="btn">修改</button></view></form>
</view>
update1:function(e){var that=thiswx.request({method:'POST',data:{id:e.detail.value.id,name:e.detail.value.name},url: 'http://127.0.0.1:3000/update1',success:function(res){that.setData({text:res.data})}})
}

5.tips:

  • 总的来说,查询是最简单的,删除和增加由于需要传参会更复杂一些,改的业务逻辑相当于先查再增——不过如果在sql语句中直接写出来就没有这么复杂了
  • 发送请求的路径一定要写对,这个在第四大节细说:

url: 'http://127.0.0.1:3000/update1',

四.Nodejs后端代码

server文件怎么建立这里就不赘述了,上期说的很齐全:

干货!微信小程序通过NodeJs连接MySQL数据库icon-default.png?t=N7T8https://jslhyh32.blog.csdn.net/article/details/137890154?spm=1001.2014.3001.5502

整体预览一下Server.js的内容:(可以直接沾)

const express=require('express')
const bodyParser =require('body-parser')
const app=express()
const mysql = require('mysql')
app.use(bodyParser.json())//处理post请求
app.post('/',(req,res) => {console.log(req.body)res.json(req.body)
})app.post('/add',(req,res)=>{// console.log(req.body.name)data=req.bodyvar connection=mysql.createConnection({host:'localhost',user:'root',password:'123456',database:'db2'})connection.connect();connection.query('INSERT INTO car SET ?', data, (error, results, fields) => {if (error) throw error;res.json({ message: '数据保存成功' });});connection.end();
})app.post('/show',(req,res)=>{console.log(req.body.name)const a=req.body.namevar connection=mysql.createConnection({host:'localhost',user:'root',password:'123456',database:'db2'})connection.connect();connection.query("select * from car where name='"+a+"'",function(error,results,fields){if(error) throw console.error;res.json(results)console.log(results)})connection.end();
})app.post('/drop',(req,res)=>{console.log(req.body.name)const a=req.body.namevar connection=mysql.createConnection({host:'localhost',user:'root',password:'123456',database:'db2'})connection.connect();connection.query("delete from car where name='"+a+"'",function(error,results,fields){if(error) throw console.error;res.json(results)console.log(results)})connection.end();
})app.post('/update1',(req,res)=>{console.log(req.body.name)data=req.bodyconst id=req.body.idconst name=req.body.namevar connection=mysql.createConnection({host:'localhost',user:'root',password:'123456',database:'db2'})connection.connect();connection.query("update car set id ="+id+" where name='"+name+"'",function(error,results,fields){if(error) throw console.error;res.json(results)console.log(results)})connection.end();
})app.listen(3000,()=>{console.log('server running at http://127.0.0.1:3000')
})
  • form表单用什么方式传参就调用app的什么方法,路径即为wx.request中的url最后一级,必须保持对应!
  • 在query方法里面输入SQL语句,传参记得用占位符,上面4种基础业务已经给大家写好了,自行品味。另外就是单引号和双引号别用串!
  • 每次使用前记得先启动node服务器,别犯低级错误;修改了server.js必须重新启动,不然无效

 

五.功能测试

原数据:

增:

删:

改:

查:


如上即为全文内容~

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

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

相关文章

深入docker-swarm overlay网络模型

目录 1.简介 2.网络模型 3.docker_gwbridge网络 3.1.docker_gwbridge网关地址 3.2.检查docker_gwbridge网络 3.2.1.查找任务容器eth接口 3.2.2.查找ingress-sbox容器eth接口 4.检查ingress网络 4.1.检查ingress网络 4.2.检查ingress网络的命名空间 4.2.1.查找任务容…

Windows搭建Svn服务器

1、svn概述 1.1、svn简介 SVN&#xff08;Subversion&#xff09;是一个开源的版本控制系统&#xff0c;用于管理代码的版本控制和协作开发。它提供了一系列的命令行工具&#xff0c;以及一套客户端和服务器架构&#xff0c;用于管理代码的版本控制和协作。 在Windows系统&a…

STM32的GPIO控制寄存器开发

寄存器GPIO控制 寄存器地址 寄存器地址计算 某个寄存器地址&#xff0c;由三个参数决定&#xff1a;1、总线基地址&#xff08;BUS_BASE_ADDR&#xff09;&#xff1b;2&#xff0c;外设基于总线基地址的偏移量&#xff08;PERIPH_OFFSET&#xff09;&#xff1b;3&#xff…

百面算法工程师 | 分类和聚类

目录 6.1 为什么正确率有时不能有效评估分类算法&#xff1f; 6.2 什么样的分类器最好&#xff1f; 6.3 什么是聚类&#xff0c;你知道哪些聚类算法&#xff1f; 6.4 K-Means聚类算法如何调优? 6.5 K-Means聚类算法如何选择初始点? 6.6 K-Means聚类聚的是特征还是样本 …

【面试经典 150 | 链表】删除链表的倒数第 N 个结点

文章目录 写在前面Tag题目来源解题思路方法一&#xff1a;统计节点个数方法二&#xff1a;双指针 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本…

向媒体投稿有了好方法财政单位信息宣传工作简单又轻松

当我初涉财政单位的信息宣传岗位,肩负起对外展示单位风采、传播政策信息的重要职责时,我深刻体验到了投稿之路的艰辛曲折。初期,对于如何有效对接媒体并成功发表稿件,我感到一片茫然,仿佛置身于浩瀚的信息海洋中,无从下手。 那时,我的工作日常就是广泛搜集各类媒体的联系方式,特…

{“errMsg“:“insertXWebCamera:fail appid privacy api banned“}

问题描述&#xff1a;微信小程序&#xff0c;在体验版本测试时&#xff0c;调用摄像头OK&#xff0c;没有任何问题&#xff0c;部署发布版本后&#xff0c;日志报错内容&#xff1a;{"errMsg":"insertXWebCamera:fail appid privacy api banned"}&#xff…

CountDownLatch倒计时器源码解读与使用

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Java全栈-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 目录 1. 前言 2. CountDownLatch有什么用 3. CountDownLatch底层原理 3.1. count…

代理设置方法 ubuntu git

目录 ubuntu设置代理方法 git 中 ubuntu设置代理方法 &#xff08;1&#xff09; .bashrc中写 或者 &#xff08;2&#xff09; 当自己的 虚拟机选择default switch&#xff0c;保持了虚拟机与本机的联通性&#xff08;host模式好像&#xff09;&#xff0c;这时&#xff0…

深度剖析图像处理—边缘检测

什么是边缘检测 边缘检测(Edge Detection)就是提取图像中的边缘点(Edge Point)。边缘点是与周围像素相比灰度值有阶跃变化或屋顶状变化的像素。边缘常存在于目标与背景之间、目标与目标之间、目标与其影子之间。 ​ 在图像处理和图像分析中&#xff0c;经常要用到边缘(Edge)、边…

【Git】生成patch和应用patch

生成patch 将本地所有修改打成补丁 git diff > /tmp/xxx.patch将本地对某个文件的修改打成补丁 git diff test/1.txt > /tmp/1.patch将某一次提交的修改内容打成补丁 -1表示只为单个提交创建patch&#xff0c;-o表示输出patch的文件夹路径&#xff0c;默认是用提交的…

D咖饮品机器人惊艳亮相:智能硬件改变生活习惯

在当今快节奏的生活中&#xff0c;人们对于便捷、高效的需求日益增长&#xff0c;智能硬件应运而生&#xff0c;其中饮品机器人作为一种新型的智能设备&#xff0c;正在以惊艳的姿态亮相于人们的生活中&#xff0c;为人们带来了全新的消费体验&#xff0c;改变着大众的生活习惯…

node-sass安装失败解决

老项目安装node-sass4.14.1一直失败 "node-sass": "^4.14.1",报错环境变量Path 中没有 python2.7 gyp verb check python checking for Python executable "python2.7" in the PATH安装python2.7,然后设置npm config set python C:\Python27 …

vulfocus的使用

vulfocus的使用 1.拉取镜像 docker pull vulfocus/vulfocus:latest 2.运行 docker run -d -p 80:80 -v /var/run/docker.sock:/var/run/docker.sock -e VUL_IP192.168.0.105 vulfocus/vulfocus 3.访问 用户名&#xff1a;admin 密码&#xff1a;admin

【机器学习】特征筛选实例与代码详解

机器学习中的特征筛选 一、特征筛选的重要性与基本概念二、特征筛选的方法与实践1. 基于统计的特征筛选2. 基于模型的特征筛选3. 嵌入式特征筛选 三、总结与展望 在机器学习领域&#xff0c;特征筛选作为预处理步骤&#xff0c;对于提高模型性能、简化模型结构以及增强模型解释…

街道社区信息宣传工作做的好这个投稿方法不能少

作为一名刚刚接手街道社区信息宣传工作的新人,伊始对于如何有效地向各大媒体平台投稿我可谓是一头雾水。那时的日子充满了曲折与挑战,每一步都似乎布满了荆棘。为了让更多居民了解社区的工作动态和服务亮点,我怀揣着满腔热情,着手撰写一篇篇生动详实的新闻稿件。然而,投稿的过程…

SpringAOP从入门到源码分析大全(三)ProxyFactory源码分析

文章目录 系列文档索引五、ProxyFactory源码分析1、案例2、认识TargetSource&#xff08;1&#xff09;何时用到TargetSource&#xff08;2&#xff09;Lazy的原理&#xff08;3&#xff09;应用TargetSource 3、ProxyFactory选择cglib或jdk动态代理原理4、jdk代理获取代理方法…

算法导论 总结索引 | 第三部分 第十一章:散列表

1、动态集合结构&#xff0c;它至少要支持 INSERT、SEARCH 和 DELETE字典操作 散列表 是实现字典操作的 一种有效的数据结构。尽管 最坏情况下&#xff0c;散列表中 查找一个元素的时间 与链表中 查找的时间相同&#xff0c;达到了 Θ(n)。在实际应用中&#xff0c;散列表的性…

CB2-2CARD之Debian(Bookworm)安装Gnome看CCTV

CB2-2CARD之Debian&#xff08;Bookworm&#xff09;安装Gnome看CCTV 1. 源由2. 需求3. Debian系统桌面3.1 系统安装3.2 磁盘扩容3.3 系统更新3.4 Gnome安装 4. 测试4.1 CCTV网页测试4.2 系统空闲测试4.3 Firefox CPU占用率测试 5. 总结 1. 源由 近些年来&#xff0c;随着国内…

【学习笔记】Vue3源码解析:第五部分 - 实现渲染(3)

课程地址&#xff1a;【已完结】全网最详细Vue3源码解析&#xff01;&#xff08;一行行带你手写Vue3源码&#xff09; 第五部分-&#xff1a;&#xff08;对应课程的第36 - 37节&#xff09; 第36节&#xff1a;《处理proxy&#xff0c;方便取值》 1、执行组件中的 render 方…