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,这简直是背刺。在仅有的半个月时间里,准备这个项目确实是非常紧张的…

故障模式与影响分析(FMEA)

故障模式与影响分析FMEA 故障模式与影响分析(FMEA)是一种系统性的风险评估方法,主要用于识别潜在的产品或过程故障模式(即系统或组件失效的方式),以及这些故障对系统性能的影响程度。FMEA通过分析可能的故…

高考英语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

android 是Application类先运行还是AndroidManifest.xml中action先运行?Application类先运行

android 是Application类先运行还是AndroidManifest.xml中action先运行 在Android应用启动过程中,Application类和AndroidManifest.xml中的action存在一个严格的初始化顺序。具体来说: Application类:在应用启动时,系统会首先实例…

《数字图像处理》实验报告二:直方图均衡化

一、实验任务与要求 1、实验任务: 读取图像,绘制直方图/归一化直方图(hist/histogram, subplot) 使用直方图均衡化函数(histeq)自己实现直方图均衡化函数 2、要求: 提交 m 文件&#xff…

树莓派只是玩具?看看上海国际嵌入式展上用树莓派做的高大上产品!

三天的 Embedded World China 上海国际嵌入式展圆满落幕!这次展会上海晶珩、英国 Raspberry Pi、工业自动化软件领导者 CODESYS 集体亮相,为观众带来了精彩纷呈的视听盛宴。在展会现场,树莓派团队带来了最新的 Raspberry Pi AI Kit 场景演示&…

网络配置(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…

P2P去中心化网络的重点组件

P2P去中心化网络的重点组件 P2P(Peer-to-Peer)去中心化网络是一种网络架构,其中所有参与者(节点)都具有平等地位,直接相互通信,而无需中央协调机构。以下是P2P去中心化网络的关键组件及其详细介…

C# .NET 8 SQL 批量插入 Dapper、BulkCopy 和表值参数

介绍 在 .NET 应用程序中处理大型数据集通常需要将数据高效地插入到 SQL Server 中。本文探讨了使用 C# 和 .NET 8 批量插入数据的三种流行技术:Dapper、SqlBulkCopy 和表值参数 (TVP)。我们将比较它们的性能、易用性和对不同场景的适用性。 1. Dapper Bulk Inser…

论Lambda架构及其应用

摘要: 2023年3月,我公司承担了本市教育局智慧教育云平台的项目,该平台旨在为教育机构和学生提供一个在线学习与教学的环境,包含课程管理、在线学习、资源共享、互动交流等功能。在项目中我担任系统架构师,全面负责项目…

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

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

代码随想录算法训练营:17/60

非科班学习算法day17 | LeetCode654:最大二叉树 ,Leetcode617:合并二叉树 ,Leetcode700:二叉搜索树中的搜索,Leetcode98:验证二叉搜索树 目录 介绍 一、基础概念补充: 1.二叉搜索树 二、LeetCode题目 1.LeetCode…

价格!六安市各地双软(软件企业、软件产品)办理流程步骤及申报材料、时间

六安市各地双软(软件企业、软件产品)办理流程步骤材料 (更多问题详情可以查看小编主页方式) 第一步:办理软件企业认定 1.打开办理软件企业认定的中心网站,然后注册并登录,下载双软认定申报表…

大数据系统软件助力工业数字化转型

随着科技的不断进步,大数据系统软件在工业领域的应用日益广泛,成为推动工业数字化转型的关键技术之一。工业数字化转型旨在通过技术手段提升生产效率、优化资源配置,并提供智能决策支持,从而实现更高效、可持续的生产模式。 数据采…

Kafka 集群如何处理生产者和消费者处理消息速率差异问题?

kafka 集群如何处理生产者和消费者处理消息速率差异问题? Kafka 集群通过多种机制来处理生产者和消费者处理消息速率的差异问题,确保消息的高效传递和系统的 稳定性。以下是详细的解释和机制: 1. 消息缓冲机制 Kafka 使用消息缓冲机制来处理生产者和消费者速率的不匹配。…

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

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

k8s重启后报错Error getting node not found

今天升级一台3主的k8s集群的配置。升级其中一台后另外两个节点就出现Not Ready的状态。 升级之前最好把一些能停的应用停掉。或者能够通过增加临时节点来进行扩容,不然所有pod调度到其他节点,可能把其他节点压垮。没办法,只能把其他两台直接…

Python学习前简介

1.python简介 2.python特点 3.python解释器 4.pyCharm简介 一、python简介 Python是一种高级编程语言,用于多种应用,包括网站开发、数据科学、人工智能、机器学习、桌面应用、网络应用、软件开发、网络爬虫等。它由Guido van Rossum于1991年首次发布&am…

group by和select的兼容性问题

group by和select的兼容性问题 在标准的SQL语法中,GROUP BY 和 SELECT 之间不存在兼容性问题,因为它们是 SQL 查询语句的基本组成部分,而且它们的使用方式是相互兼容的。 SELECT 子句和 GROUP BY 子句的关系: SELECT 子句&#…