NodeJs实现对本地 mysql 数据库的增删改查

写在前面

今天我们接着写nodejs对数据库的操作,今天实现简单的增删改查,读之前请先移步到这里NodeJs 连接本地 mySql 数据库获取数据,避免后续一些代码出险阅读断层。

安装 nodemon
npm install nodemon

因为 nodejs 的服务是本地启动,避免后续频繁启动服务,安装 nodemon 可以帮助我们实现热重载 不安装也可以,手动重启就可以了。

整体文件结构如图

在这里插入图片描述

实现基础服务
/*** @author 是悟能了* @aim 实现基础服务* @fileName baseServer.js*/const express = require('express');
const bodyParser = require('body-parser');
const serve = express();
const port = 8000;// TODO: 解析获取到的 json 数据
serve.use(bodyParser.urlencoded({extended: false
}));serve.use(bodyParser.json());serve.listen(port, () => {console.log(`serve is running...port = ${port}`);
});module.exports = serve;
测试启动
nodemon baseBaseServer.js

在这里插入图片描述

实现基础数据库连接
/*** @author 是悟能了* @aim 链接 mysql 数据库* @fileName baseLinkData.js*/const mysql = require('mysql');
// TODO: 创建数据库链接
const db = mysql.createConnection({host: "localhost",user: "root",password: "**********", //自己的数据库链接密码database: "sys",
});db.connect((err) => {if (err) {console.error('Error connecting to MySQL database:', err);return;}console.log('Connected to MySQL database success');
});module.exports = db;
测试连接数据库
nodemon baseLinkDateBase.js

在这里插入图片描述

实现基础回调信息
// TODO: 回调信息
module.exports = (status, code, message, data = [] || {}) => {return JSON.stringify({status,code,message,data})
}
实现静态数据库表的管理
// 表明配置
const TABLES = {USERINFOS: 'userinfos'
}module.exports = TABLES;
实现 CURD 功能
接口测试连通性
/*** @author 是悟能了* @aim 实现基础的 CURD*/const serve = require('./baseServer.js'); // 引入基础服务
const db = require('./baseLinkDateBase.js'); // 引入数据库链接
const TABLES = require('./TABLES.js'); // 引入 database - table
const errContent = require('./status.js'); // 引入回调信息// TODO: 测试接口连通性
serve.get("/", (req, res) => {// res.status(403);res.send(errContent(200, 1001, '接口连通性成功'));
});
启动服务
nodemon handleDataBase.js 

在这里插入图片描述
在这里插入图片描述

查询所有数据
// TODO: 查询所有数据
serve.get("/api/v1/optionList", (req, res) => {const sql = `SELECT * FROM ${TABLES.USERINFOS}`;console.log(`当前执行SQL - ${sql}`);db.query(sql, (err, result) => {if (err) {res.status(500).send(errContent(500, 1009, '数据库访问失败'));} else {res.status(200).send(errContent(200, 1001, '查询成功', result));}})
});

在这里插入图片描述

新增一条数据
// TODO: 增加一条数据
serve.post("/api/v1/optionList", (req, res) => {const params = req.body;const sql = `INSERT INTO ${TABLES.USERINFOS}(name,age,gender) VALUES(?,?,?)`;const value = [params.name, params.age, params.gender];console.log(`当前执行SQL - ${sql} - ${params.name}`);db.query(sql, value, (err, result) => {if (err) {res.status(500).send(errContent(500, 1009, '新增失败'));} else {res.status(200).send(errContent(200, 1001, '新增成功'));}})
});

在这里插入图片描述

更新一条数据
// TODO: 更新一条数据
serve.put("/api/v1/optionList", (req, res) => {const params = req.body;const sql = `UPDATE ${TABLES.USERINFOS} SET gender = ? WHERE name = ?`;const value = ['women', params.name]console.log(`当前执行SQL - ${sql} - ${params.name}`);db.query(sql, value, (err, result) => {if (err) {res.status(500).send(errContent(500, 1009, '更新失败'));} else {res.status(200).send(errContent(200, 1001, '更新成功'));}})
});

在这里插入图片描述

删除一条数据
// TODO: 删除一条数据
serve.delete("/api/v1/optionList", (req, res) => {const params = req.body;const sql = `DELETE FROM ${TABLES.USERINFOS} WHERE name = ?`;const value = [params.name];console.log(`当前执行SQL - ${sql} - ${params.name}`);db.query(sql, value, (err, result) => {if (err) {res.status(500).send(errContent(500, 1009, '删除失败'));} else {res.status(200).send(errContent(200, 1001, '删除成功'));}})
});

在这里插入图片描述

根据条件查询
// TODO: 根据条件查询
serve.get("/api/v1/optionList/:name", (req, res) => {const params = req.params;console.log(`当前参数 - ${JSON.stringify(params)}`);const sql = `SELECT * FROM ${TABLES.USERINFOS} WHERE name = ?`;const value = [params.name];console.log(`当前执行SQL - ${sql}`);db.query(sql, value, (err, result) => {if (err) {res.status(500).send(errContent(500, 1009, '查询失败'));} else {res.status(200).send(errContent(200, 1001, '查询成功', result));}})
})

在这里插入图片描述

本地数据库截图

在这里插入图片描述

写在后面

以上就是关于 nodejs 对数据库表中的数据基本的操作,代码只是实现基础功能,没有进行封装,可以进行封装之后会更好用一些。

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

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

相关文章

FPGA开发Vivado安装教程

前言 非常遗憾的一件事情是,在选修课程时我避开了FPGA,选择了其他方向的课程。然而,令我没有想到的是,通信项目设计的题目竟然使用FPGA,这简直是背刺。在仅有的半个月时间里,准备这个项目确实是非常紧张的…

高考英语3500词

DAY1 DAY2 DAY3 DAY4 DAY5 DAY6 DAY7 DAY8 DAY9 DAY10 DAY11 DAY12 DAY13 DAY14 DAY15 DAY16 DAY17 DAY18 DAY19 DAY20 DAY21 DAY22 DAY23 DAY24 DAY25 DAY26 DAY27 DAY28 DAY29 DAY30 DAY31 DAY32 DAY33 DAY34 DAY35 DAY36 DAY37 DAY38 DAY39 DAY40

网络配置(IP、NETMASK、GATEWAY、DNS、DHCP)

参考: 初学Linux之网络配置(IP、NETMASK、GATEWAY、DNS、DHCP)-CSDN博客【学习笔记】网关 & 路由_网关和路由-CSDN博客【学习笔记】计算机网络 IP地址与MAC地址_根据mac分配ip-CSDN博客【学习笔记】TCP 和 UDP 协议_tcp 发送 syn 应答没有syn ack-CSDN博客 一…

java版CRM客户关系管理系统Spring Cloud alibaba Spring Boot成长型企业必备的客户关系管理系统

鸿鹄CRM客户关系管理系统是一款基于Java语言开发的CRM系统,采用了Spring Cloud Alibaba、Spring Boot、MybatisPlus、Redis和VUE3 ElementUI等技术,构建了一个微服务架构。该系统具有以下功能模块: 一、待办事项 1、今日需联系客户&#xf…

实在RPA的硬件交互功能:U盾机械臂组件

一、为什么需要U盾机械臂? 在使用银行U盾(USB Key)进行操作时,涉及到许多手动确认步骤,特别是按下U盾上的确认按键。这种手动操作是自动化过程中的一个瓶颈。为了实现完全自动化,需要一种方法来自动按下U…

接口测试中遇到的sessionID验证问题

在接口测试中,经常会存在联调的接口,比如登录完去调用其他的接口,这时就会存在一个问题,那就是登录成功了,但是其他接口失败了,这个时候就需要用到一个sessionID去传入其他接口验证合法性请求,这…

Matlab进阶绘图第61期—滑珠散点图

滑珠散点图也是一种在《Nature》中常见的数据图。 其功能类似于柱状图,但更加简洁易读。 由于Matlab中没有现成的函数绘制滑珠散点图,因此需要大家自行解决。 本文利用自己制作的BubbleScatter工具,进行滑珠散点图的绘制,先来看…

ServBay[中文] 下一代Web开发环境

ServBay是一个集成式、图形化的本地化Web开发环境。开发者通过ServBay几分钟就能部署一个本地化的开发环境。解决了Web开发者(比如PHP、Nodejs)、测试工程师、小型团队安装和维护开发测试环境的问题,同时可以快速的进行环境的升级以及维护。S…

Chrome开发者工具学习

打开开发者工具: 可以通过在网页上点击右键并选择“检查”来打开。 或者使用快捷键Ctrl Shift I(在Windows/Linux上)或Command Option I(在Mac上)。 界面概览: 熟悉DevTools的基本面板,如“…

【精品案例】数字孪生技术与数字工厂案例(59页PPT)

引言:随着工业4.0和智能制造的快速发展,数字孪生技术和数字工厂已成为制造业转型升级的重要趋势。数字孪生技术通过构建虚拟的数字模型,实现对物理实体全生命周期的映射与仿真,为企业的产品研发、设计、制造等提供有力支持。而数字…

【AI大模型应用开发】3. RAG初探 - 动手实现一个最简单的RAG应用

0. 什么是RAG 大模型也不是万能的,也有局限性。 LLM 的知识不是实时的LLM 可能不知道你私有的领域/业务知识 RAG(Retrieval Augmented Generation)顾名思义:通过检索的方法来增强生成模型的能力。你可以把这个过程想象成开卷考…

MATLAB算法实战应用案例精讲-【数模应用】线性判别分析(附MATLAB、python和R语言代码实现)

目录 前言 算法原理 什么是判别分析 线性判别分析(LDA) 数学模型 二分类 多分类LDA ​编辑 算法思想: 费歇(FISHER)判别思想 贝叶斯(BAYES)判别思想 LDA算法流程 LDA与PCA对比 SPSSPRO 1、作用 2、输入输出描述 3、案例示例 4、案例数据 5、案例操作 …

VC++开发积累——vc++6.0中删除函数的方法,右键,Delete

目录 引出插曲:删除函数的方法多行注释的实现代码输入的自动提示搜索出来,标记和取消标记跳转到上一步的位置 ctrl TAB 总结其他规范和帮助文档创建第一个Qt程序对象树概念信号signal槽slot自定义信号和槽1.自定义信号2.自定义槽3.建立连接4.进行触发 自…

DM达梦数据库字符串函数整理

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝&#x1f49…

python基础篇(5):None类型

1 None类型 Python中有一个特殊的字面量&#xff1a;None&#xff0c;其类型是&#xff1a;<class NoneType> 无返回值的函数&#xff0c;实际上就是返回了&#xff1a;None这个字面量 None表示&#xff1a;空的、无实际意义的意思 函数返回的None&#xff0c;就表示…

Avue-data数据大屏显示饼图(附Demo)

目录 前言1. Sql查询2. 颜色细节 前言 对于这部分知识&#xff0c;原先有过柱状图实战&#xff1a;Avue-data数据大屏显示柱状图&#xff08;附Demo讲解&#xff09; 以下直奔主题&#xff0c;以Sql数据库数据为主 1. Sql查询 以饼图为例&#xff0c;需要返回的形式如下&am…

Kafka基本架构

「kafka设计思想」 一个最基本的架构是生产者发布一个消息到Kafka的一个Topic &#xff0c;该Topic的消息存放于的Broker中&#xff0c;消费者订阅这个Topic&#xff0c;然后从Broker中消费消息&#xff0c;下面这个图可以更直观的描述这个场景&#xff1a; 「消息状态&#x…

嵌入式通信协议-----UART协议详解(基于智芯Z20k11X)

目录 一、简介 1.概念 2.结构 3.特点 4.优缺点 二、协议帧组成 1.起始位 2.数据位 3.奇偶校验位 4.停止位 三、UART通信过程 四、USART与UART区别 五、代码实现 1.硬件框图 2.软件实现 一、简介 1.概念 USART&#xff08;Universal Synchronous Asynchronous R…

2024年最新机动车签字授权人考试题库。

31."简易瞬态工况法"所使用的五气分析仪的温度范图:分析系统及相关部件应在&#xff08; &#xff09;。 A.0-40℃ B.0-50℃ C.0-60℃ D.-10-40℃ 答案:A 32.稀释氧传感器环境空气量程检测时的读数值位于&#xff08; &#xff09;%vol范围之外时&#xff0c;应…

成都百洲文化传媒有限公司助力电商品牌乘风破浪

在当今数字化时代&#xff0c;电商行业风起云涌&#xff0c;竞争异常激烈。成都百洲文化传媒有限公司凭借其对电商行业的深刻理解与实战经验&#xff0c;已然成为行业中的佼佼者。公司专注于电商服务领域&#xff0c;通过创新的营销模式和精准的市场策略&#xff0c;助力众多品…