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

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

相关文章:

  • Flink 窗口函数
  • 网络编程5----初识http
  • 类AAAAAAAAAAAA迭代
  • SpringBoot使用Redisson实现可重入分布式锁
  • 如何正确理解和评估品牌价值?
  • C语言循环中获取之前变量的值
  • fataadmin导出Exel文件图片太大
  • 雷池社区版自动SSL
  • Go语言 获取服务器资源磁盘Disk情况
  • Vue3DraggableResizable知识点
  • 模型轻量化:数据瘦身的成功秘诀
  • Beyond VL了解学习
  • 【C语言】14.数组指针与函数指针及其应用
  • 智能农业管理系统设计
  • 数据标注-语音标注
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • Cumulo 的 ClojureScript 模块已经成型
  • ES6系列(二)变量的解构赋值
  • JavaScript-Array类型
  • java正则表式的使用
  • js如何打印object对象
  • js学习笔记
  • KMP算法及优化
  • MySQL主从复制读写分离及奇怪的问题
  • OSS Web直传 (文件图片)
  • Redux系列x:源码分析
  • scala基础语法(二)
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 搭建gitbook 和 访问权限认证
  • 机器学习学习笔记一
  • 记录一下第一次使用npm
  • 力扣(LeetCode)22
  • 免费小说阅读小程序
  • 驱动程序原理
  • 入门到放弃node系列之Hello Word篇
  • 优秀架构师必须掌握的架构思维
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • #在 README.md 中生成项目目录结构
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (C++17) optional的使用
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (差分)胡桃爱原石
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)springboot教学评价 毕业设计 641310
  • (十一)手动添加用户和文件的特殊权限
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • ..回顾17,展望18
  • .net 8 发布了,试下微软最近强推的MAUI
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET使用存储过程实现对数据库的增删改查
  • .NET项目中存在多个web.config文件时的加载顺序
  • .NET中两种OCR方式对比
  • .net中生成excel后调整宽度