❤Node04-操作本地数据库增删改查

2024-08-23 23:44

本文主要是介绍❤Node04-操作本地数据库增删改查,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

❤Nodejs 第四章(Node +Express操作本地数据库增删改查)

1、认识接口(Node.js RESTful API)

接下来我们先认识一些前置知识,看看Node.js里面的RESTful API是什么,如何帮助我们实现接口的

以下为 REST 基本架构的四个方法:

  • GET - 用于获取数据
  • PUT - 用于更新或添加数据
  • DELETE - 用于删除数据
  • POST - 用于添加数据

注:get和delete是在路径中传递数据,而post和put可以在request body中传递数据

2、查询用户列表 (/api/user--get查询 )

之前我们采用Node连接数据库并查询数据,现在我们使用本地的axios进行请求数据 本地进行调用

js// 获取用户
function getUserList(row) { axios.get('http://localhost:8888/api/user').then(res => {console.log(res, '/user/list');if (res.status == 200) {console.log(res,'res');tableData.value = res.data.data;}})
}

突然发现报错了:

分析报错我们发现是由于跨域访问引起的,前端设置允许跨域 在app.js之中添加这段代码

jsapp.all('*', function (req, res, next) {res.header("Access-Control-Allow-Origin", "*");res.header("Access-Control-Allow-Headers", "X-Requested-With");res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");res.header("X-Powered-By", ' 3.2.1')res.header("Content-Type", "application/json;charset=utf-8");next();
});

app.js完整过程如下:

jsconst connection = mysql.createPool({host: 'localhost', // 数据库主机地址,如果是本地数据库则使用localhostuser: 'root', // 数据库用户名password: '', // 数据库密码database: 'nexus' // 要连接的数据库名
});const app = express();
//设置跨域访问
app.all('*', function (req, res, next) {res.header("Access-Control-Allow-Origin", "*");res.header("Access-Control-Allow-Headers", "X-Requested-With");res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");res.header("X-Powered-By", ' 3.2.1')res.header("Content-Type", "application/json;charset=utf-8");next();
});app.get('/', (req, res) => {res.send('林太白数据库!');
});// 创建路由
app.get('/api/user/list', (req, res) => {// 查询数据库并返回数据connection.query('SELECT * FROM user', (err, results) => {console.log(err,'err');console.log(results,'results');if (err) {console.error('Error querying database:', err);res.status(500).json({ error: 'Internal server error' });return;}res.json({code:'200',data:results,});// res.json(results);});
});

重启服务器:

node app.js

查询成功!

3、增加用户 (/api/user--post新增 )

Mysql增加用户操作命令为

jsINSERT INTO user (name,sex) VALUES ('张三',1)

执行命令我们已经将数据添加进入数据库之中。

接下来我们在我们的Node里面进行一下添加

jsSql的插入语句为:
`INSERT INTO user (name, age) VALUES (?, ?)`

那我们手写的POST增加用户请求处理就是

js// 新增用户 POST 请求处理程序 
app.post('/api/user', (req, res) => {console.log(req.body);const { name, age } = req.body; // 从请求体中获取数据const values = [name, age];// 准备 SQL 插入语句const insertSql = `INSERT INTO user (name, age) VALUES (?, ?)`;connection.query(insertSql, values, (err, results) => {console.log(err,'err');console.log(results,'results');if (err) {console.error('Error querying database:', err);res.status(500).json({ error: 'Internal server error' });return;}res.json({code:'200',data:results,});});
});

增加用户成功!

4、修改用户信息以后提交修改(/api/user--put修改 )

Mysql更改用户操作命令为

jsUPDATE user SET name = '可爱', age = 18 WHERE id = 12

查看我们的sql数据库,数据库已经更改成功!

使用axios之中的put方法提交更改的数据,用户有ID的时候根据id进行更改 更新用户数据 PUT请求处理程序

js
// 更新用户数据 PUT请求处理程序 
app.put('/api/user', (req, res) => {console.log(req.body);const { name, age ,id} = req.body; // 从请求体中获取数据const values = [name, age, id];// 准备 SQL 插入语句const sql = "UPDATE user SET name = ?, age = ? WHERE id = ?";connection.query(sql, values, (err, results) => {console.log(err,'err');console.log(results,'results');if (err) {console.error('Error querying database:', err);res.status(500).json({ error: 'Internal server error' });return;}res.json({code:'200',data:results,});});
});

数据已经更改成功!

到这里我们已经实现了增改查,接下来下一节就是针对我们的删除进行处理。

前置知识​

注:get和delete是在路径中传递数据,而post和put可以在request body中传递数据

5、删除用户信息(/api/user--delete 删除)​

(1)数据库语句​

先试试数据库的删除语句,删除id为8的数据

jsDELETE FROM user WHERE id = 8

id为8的数据我们已经删除成功!

(2)手写删除方法​

接下来我们手写我们的删除 先在node之中手写我们的删除delete方法

js// 删除用户数据 DELETE请求处理程序  
app.delete('/api/user', (req, res) => {const {id} = req.body; // 从请求体中获取数据const values = [ id];const sql = "DELETE FROM user WHERE id = ?";connection.query(sql, values, (err, results) => {console.log(err,'err');console.log(results,'results');if (err) {console.error('Error querying database:', err);res.status(500).json({ error: 'Internal server error' });return;}res.json({code:'200',data:results,});});
});

(3)axio请求删除数据​

接下来拿axio请求删除数据,根据id来删除用户is为5的数据

js// 删除用户信息
function handleDelete(row) {console.log(row, '删除');let id=row.id;let api = "http://localhost:8888/api/user";let data={id:row.id};console.log(row.id,'row.id');axios.delete(api,data).then(res => {if (res.status == 200) {console.log(res, 'res');centerDialogVisible.value = false;}})
}

点击删除以后删除成功,然后我们刷新数据库数据。

我们的删除成功了,但是数据却依然存在,这是什么原因呢?

查看node控制台输出我们可以发现,原来我们压根没有拿到用户的id

这就需要提到我们一开始上面警示语句: 注:get和delete是在路径中传递数据,而post和put可以在request body中传递数据

(4)优化删除​

那我们尝试将用户的id放到我们的地址上试试,node删除方法就跟改为:

js// 删除用户数据 DELETE请求处理程序  
app.delete('/api/user/:id', (req, res) => {const {id} = req.body; // 从请求体中获取数据const values = [id];const userId = req.params.id;console.log(userId,'userId');const sql = "DELETE FROM user WHERE id = ?";connection.query(sql, values, (err, results) => {console.log(err,'err');console.log(results,'results');if (err) {console.error('Error querying database:', err);res.status(500).json({ error: 'Internal server error' });return;}res.json({code:'200',data:results,});});
});

再来调用我们的删除

js// 删除用户数据 DELETE请求处理程序  
app.delete('/api/user/:id', (req, res) => {const id = req.params.id;const values = [id];const sql = "DELETE FROM user WHERE id = ?";connection.query(sql, values, (err, results) => {console.log(err,'err');console.log(results,'results');if (err) {console.error('Error querying database:', err);res.status(500).json({ error: 'Internal server error' });return;}res.json({code:'200',data:results,});});
});

请求发现我们地址已经成为了 http://localhost:8888/api/user/5 刷新数据库,果然我们删除已经成功了!

到这里我们已经实现了增删改查,接下来下一节就是插入一些额外针对我们的增删改查进行优化和处理。

这篇关于❤Node04-操作本地数据库增删改查的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1100833

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

[MySQL表的增删改查-进阶]

🌈个人主页:努力学编程’ ⛅个人推荐: c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 💻💻💻数据库约束 🔭🔭🔭约束类型 not null: 指示某列不能存储 NULL 值unique: 保证某列的每行必须有唯一的值default: 规定没有给列赋值时的默认值.primary key:

深入理解数据库的 4NF:多值依赖与消除数据异常

在数据库设计中, "范式" 是一个常常被提到的重要概念。许多初学者在学习数据库设计时,经常听到第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及 BCNF(Boyce-Codd范式)。这些范式都旨在通过消除数据冗余和异常来优化数据库结构。然而,当我们谈到 4NF(第四范式)时,事情变得更加复杂。本文将带你深入了解 多值依赖 和 4NF,帮助你在数据库设计中消除更高级别的异常。 什么是

DM8数据库安装后配置

1 前言 在上篇文章中,我们已经成功将库装好。在安装完成后,为了能够更好地满足应用需求和保障系统的安全稳定运行,通常需要进行一些基本的配置。下面是一些常见的配置项: 数据库服务注册:默认包含14个功能模块,将这些模块注册成服务后,可以更好的启动和管理这些功能;基本的实例参数配置:契合应用场景和发挥系统的最大性能;备份:有备无患;… 2 注册实例服务 注册了实例服务后,可以使用系统服务管理,

速了解MySQL 数据库不同存储引擎

快速了解MySQL 数据库不同存储引擎 MySQL 提供了多种存储引擎,每种存储引擎都有其特定的特性和适用场景。了解这些存储引擎的特性,有助于在设计数据库时做出合理的选择。以下是 MySQL 中几种常用存储引擎的详细介绍。 1. InnoDB 特点: 事务支持:InnoDB 是一个支持 ACID(原子性、一致性、隔离性、持久性)事务的存储引擎。行级锁:使用行级锁来提高并发性,减少锁竞争

开源分布式数据库中间件

转自:https://www.csdn.net/article/2015-07-16/2825228 MyCat:开源分布式数据库中间件 为什么需要MyCat? 虽然云计算时代,传统数据库存在着先天性的弊端,但是NoSQL数据库又无法将其替代。如果传统数据易于扩展,可切分,就可以避免单机(单库)的性能缺陷。 MyCat的目标就是:低成本地将现有的单机数据库和应用平滑迁移到“云”端

ORACLE 11g 创建数据库时 Enterprise Manager配置失败的解决办法 无法打开OEM的解决办法

在win7 64位系统下安装oracle11g,在使用Database configuration Assistant创建数据库时,在创建到85%的时候报错,错误如下: 解决办法: 在listener.ora中增加对BlueAeri-PC或ip地址的侦听,具体步骤如下: 1.启动Net Manager,在“监听程序”--Listener下添加一个地址,主机名写计

动手学深度学习【数据操作+数据预处理】

import osos.makedirs(os.path.join('.', 'data'), exist_ok=True)data_file = os.path.join('.', 'data', 'house_tiny.csv')with open(data_file, 'w') as f:f.write('NumRooms,Alley,Price\n') # 列名f.write('NA

MyBatis 切换不同的类型数据库方案

下属案例例当前结合SpringBoot 配置进行讲解。 背景: 实现一个工程里面在部署阶段支持切换不同类型数据库支持。 方案一 数据源配置 关键代码(是什么数据库,该怎么配就怎么配) spring:datasource:name: test# 使用druid数据源type: com.alibaba.druid.pool.DruidDataSource# @需要修改 数据库连接及驱动u