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 对数据库表中的数据基本的操作,代码只是实现基础功能,没有进行封装,可以进行封装之后会更好用一些。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习】transformer框架理论详解和代码实现

Hi~!这里是奋斗的小羊,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 💥💥个人主页:奋斗的小羊 💥💥所属专栏:C语言 🚀本系列文章为个人学习…

【C语言】14.数组指针与函数指针及其应用

一、数组指针 顾名思义,数组指针就是指向数组的指针。形如:int (*p)[10]; 注意:[]的优先级要高于*号的,所以必须加上()来保证p先和*结合。 数组指针的使用 int arr[10] {0}; int (*parr)[10] &arr;…

【Matlab】BP 神经网络分类算法(附代码)

资源下载: https://download.csdn.net/download/vvoennvv/89466423 分类算法资源合集:https://download.csdn.net/download/vvoennvv/89466519 目录 Matlab SVM支持向量机分类算法 Matlab RF随机森林分类算法 Matlab RBF径向基神经网络分类算法 Mat…

【C++题解】1713 - 输出满足条件的整数3

问题:1713 - 输出满足条件的整数3 类型:简单循环 题目描述: 有一个数列,该数列的前 4 个数是: 1 4 7 10 ; 请从键盘读入一个正整数 n ,请通过观察前 4 项的规律,输出 1∼n 之间所有…

课程标准包括哪些内容?

老师们常常会思考:课程标准究竟包含哪些要素?课程标准不仅仅是一系列冷冰冰的条条框框,而是活生生的指导原则,引领教学实践,激发学生的潜能。 课程标准,简而言之,是对学习成果的期望和要求的明确…

python20 函数的定及调用

函数的定及调用 函数是将一段实现功能的完整代码,使用函数名称进行封装,通过函数名称进行调用。以此达到一次编写,多次调用的目的 用 def 关键字来声明 函数 格式: def 函数名(参数列表):函数体[:return 返回值是可选的&#xff0…

接口自动化测试实战:测试用例也能自动生成

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 作为测试,你可能会对以下场景感到似曾相识:开发改好的 BUG 反复横跳&…

DC电源实现12V转换为9V,有这4方法?

想要将DC12V电压转换为DC9V电压输出。DCDC电源降压的方式很多,相关类型的电源芯片也很多,有线性降压模式也有开关降压模式的电源芯片。 1、若输出电源电压要求不高,电流≤1A,直接使用7809三端稳压器即可,既简单又方便。…

电脑ai写作软件,4款实用的软件!

在数字化时代,AI写作软件已经成为创作者们不可或缺的工具。它们利用先进的自然语言处理技术和大数据分析,能够快速生成高质量的文章,大大提升了创作效率。那么,市面上有哪些值得一试的电脑AI写作软件呢?让我们一起来盘…

The Sandbox 购入几大迷因币!

The Sandbox 是一个致力于支持虚拟艺术家和创作者的全球性社区。我们相信创意文化是开放式元宇宙的基石,我们会花时间参与并帮助 Web3 生态系统的发展,使其中的参与者受益。 为了进一步实现这一目标,我们购买了几种流行的 迷因币,…

20240621将需要自启动的部分放到RK3588平台的Buildroot系统的rcS文件中

20240621将需要自启动的部分放到RK3588平台的Buildroot系统的rcS文件中 2024/6/21 17:15 开发板:飞凌OK3588-C SDK:Rockchip原厂的Buildroot 缘起:在凌OK3588-C的LINUX R4系统启动的时候,需要拉高GPIO4_B5、GPIO3_B7和GPIO3_D0。…

内江科技杂志内江科技杂志社内江科技编辑部2024年第13期目录

科教兴国 内江市科技局“五个强化”助力“五经普”工作有序推进 本刊通讯员; 1 内江市多措并举融入成渝中线科创走廊建设 本刊通讯员; 2 科学管理《内江科技》投稿:cnqikantg126.com 数字化社会公共图书馆的服务效能提升策略研究 闫永凤;臧萌;王亚博;王…

Midjourney v6 快速入门指南

Midjourney V6快速入门教程来了,这是Midjourney的AI图像生成器的又一次令人印象深刻的升级。最显著的是,V6在逼真渲染和图像中的文字功能方面取得了重大进展。 在这篇文章中,我们将探讨如何开始使用Midjourney V6,并提供一些示例…

使用 Java 构建和消费 RESTful 服务的基本方法

REST(Representational State Transfer)是一种架构风格,它基于Web标准和HTTP协议,常用于构建网络服务。使用Java构建和消费RESTful服务需要掌握一些基本概念和技术。 一、RESTful服务的基本概念 1. REST架构风格 REST架构风格的…

四,SSM整合-前后端分离(实现分页+前后端校验)

分页与校验 实现功能07-分页显示列表需求分析/图解思路分析代码实现完成测试 实现功能08-带条件查询分页显示列表需求分析/图解思路分析代码实现 实现功能09-添加家居表单前端校验需求分析/图解思路分析代码实现 实现功能10-添加家居表单后端校验需求分析/图解思路分析代码实现…

精准测试与传统的手工测试

大部分测试从业人员都经历了手工测试到自动化测试递进,测试技术及思路都发生了日新月异的变化,有些中厂及大厂都有一套强大且复杂的自动化测试用例时刻保障产品的稳定性及正确性。 所谓精准测试,就是借助一定的技术手段、通过算法的辅助对传…

虚拟机拖拽文档造成缓存过大

查看文件夹大小:du -h --max-depth1 缓存位置:~/.cache/vmware/drag_and_drop 删除:rm -fr ~/.cache/vmware/drag_and_drop 释放了3GB

解决Few-shot问题的两大方法:元学习与微调

基于元学习(Meta-Learning)的方法: Few-shot问题或称为Few-shot学习是希望能通过少量的标注数据实现对图像的分类,是元学习(Meta-Learning)的一种。 Few-shot学习,不是为了学习、识别训练集上的数据,泛化…

深入理解前端缓存

前端缓存是所有前端程序员在成长历程中必须要面临的问题,它会让我们的项目得到非常大的优化提升,同样也会带来一些其它方面的困扰。大部分前端程序员也了解一些缓存相关的知识,比如:强缓存、协商缓存、cookie等,但是我…

后端程序员的Linux命令指南

后端程序员的终极命令指南:考考自己是不是真正掌握Linux的使用 欢迎各位穿着格子衬衫,常年抱着键盘睡觉的后端小伙伴们👋👋👋!今天,考考你们是不是掌握以下让你们在日后在服务器上叱咤风云的命令…