(基础篇)通过node增删改查连接mysql数据库

news2024/11/15 11:10:25

 

一定要会最基础的sql建表一定要会最基础的sql建表一定要会最基础的sql建表

 首先说一下准备工作

一、准备工具
1.mysql数据库+Navicat可视化工具(数据库表单已经建好)

我这里用的小皮工具直接开启的本地mysql 

2.vscode (不用说基本上都有)

3.node.js 环境 (自行安装)

二 、准备工作
1.再vscode中新建文件夹,右键文件夹选择集成终端中打开

2.输入初始化命令:npm init -y

3.安装express 模块:npm i express

4.安装mysql模块:npm i mysql

安装完毕如下图显示:

 

三、编写代码

新建app.js文件

我直接把写好的发出来了,连接数据库内容根据实际内容改变

const express = require('express');
const bodyParser = require('body-parser');
const mysql = require('mysql');
const app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended: true
}));

// 创建数据库连接池  
const pool = mysql.createPool({
    user: 'root',
    password: 'root',
    host: 'localhost',
    database: 'sys'
});
//添加
app.post('/user/add', (req, res) => {
    const {
        name,
        avatar,
        longitude,
        latitude
    } = req.body;

    if (!name || !avatar) {
        return res.status(400).send('名字和头像必填');
    }

    let sqlQuery = 'INSERT INTO users (name, avatar';
    let values = [name, avatar];

    if (longitude !== undefined && latitude !== undefined) {
        sqlQuery += ', longitude, latitude)';
        values.push(longitude, latitude);
    } else {
        sqlQuery += ')';
    }

    // 使用参数化查询来防止 SQL 注入  
    pool.query(sqlQuery + ' VALUES (?, ?, ?, ?)', values, (err) => {
        if (err) {
            console.error('执行 SQL 查询时出错:', err);
            res.status(500).send('内部服务器错误');
        } else {
            console.log('SQL 语句执行成功');
            res.send({
                message: '添加成功',
                code: 200
            });
        }
    });
});
// 编辑接口    
app.post('/user/edit/:user_id', (req, res) => {
    const {
        name,
        avatar,
        longitude,
        latitude,
        user_id
    } = req.body;

    // 查找用户记录  
    pool.query('SELECT * FROM users WHERE user_id = ?', [user_id], (err, results) => {
        if (err) {
            console.error('查找用户记录时出错:', err);
            return res.status(500).send('内部服务器错误');
        }
        if (results.length === 0) {
            return res.status(404).send('未找到用户记录');
        }
        const user = results[0];
        // 构建 SQL 更新语句    
        let sqlQuery = 'UPDATE users SET name = ?, avatar = ?';
        let sqlValues = [name, avatar];

        if (longitude) {
            sqlQuery += ', longitude = ?';
            sqlValues.push(longitude);
        }

        if (latitude) {
            sqlQuery += ', latitude = ?';
            sqlValues.push(latitude);
        }

        sqlQuery += ' WHERE user_id = ?';
        sqlValues.push(user_id);

        // 执行 SQL 更新语句    
        pool.query(sqlQuery, sqlValues, (err) => {
            if (err) {
                console.error('执行 SQL 更新时出错:', err);
                return res.status(500).send('内部服务器错误');
            } else {
                console.log('SQL 语句执行成功');
                res.send({
                    message: '编辑成功',
                    code: 200
                });
            }
        });
    });
});
// 修改用户状态的接口  
app.post('/user/updateStatus/:user_id', (req, res) => {
    const {
        status
    } = req.body; // 从请求体中提取状态参数  
    const user_id = req.params.user_id; // 从路由参数中获取用户 ID  
    // 构建 SQL 更新语句,只更新 status 字段  
    const sqlQuery = 'UPDATE users SET status = ? WHERE user_id = ?';
    const sqlValues = [status, user_id];
    // 执行 SQL 更新语句  
    pool.query(sqlQuery, sqlValues, (err) => {
        if (err) {
            console.error('执行 SQL 更新时出错:', err);
            return res.status(500).send('内部服务器错误');
        } else {
            console.log('SQL 语句执行成功');
            res.send({
                message: '状态更新成功',
                code: 200
            }); // 或者其他适当的响应消息  
        }
    });
});
// 删除用户接口  
app.delete('/user/delete/:user_id', (req, res) => {
    const userId = req.params.user_id;
    if (!userId) {
        return res.status(400).send('Missing required fields');
    }

    // 构建 SQL 查询语句  
    const sqlQuery = 'DELETE FROM users WHERE user_id = ?';

    // 执行 SQL 查询  
    pool.query(sqlQuery, [userId], (err) => {
        if (err) {
            console.error('执行 SQL 查询时出错:', err);
            res.status(500).send('内部服务器错误');
        } else {
            console.log('SQL 语句执行成功');
            res.send({
                message: '删除成功',
                code: 200
            });
        }
    });
});
//获取用户列表
app.get('/user/list', (req, res) => {
    pool.query('SELECT * FROM users', (err, results) => {
        if (err) {
            console.log(err, '如果为null,sql语句执行成功');
            res.status(500).send('查询失败');
        } else {
            res.send({
                record: results,
                message: '查询成功',
                code: 200
            });
        }
    });
});

process.on('unhandledRejection', (reason, promise) => {
    console.error('未处理的 Promise 拒绝:', reason);
});

app.listen(3000, () => {
    console.log('服务器在3000端口开启。。。。。');
});

进入文件夹运行 node .\app.js

运行成功会出现这句话,现在就可以直接调用接口了

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

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

相关文章

C语言学习----指针和数组

🌈这篇blog记录一下指针学习~ 主要是关于指针和数组之间的关系,还有指针的使用等~ 🍎指针变量是一个变量 其本身也有一个地址 也需要存放,就和int char等类型一样的,也需要有一个地址来存放它 🍌而指针变量…

自动生成采集规则的网页采集器

传统的采集器配置采集规则,需要查看网页源码,这要求用户具备一定的编程知识,增加了使用难度,也让很多不懂代码的用户无法采集数据了。 然而,现在有一种智能网页采集器工具:简数采集器,无需懂代…

Mapreduce小试牛刀(2)--java api

1.同hdfs 的java api,我们首先要在IDE中建立一个maven项目 pom.xml中配置如下&#xff1a; <dependencies><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-mapreduce-client-common</artifactId><version>3.…

TS系列-keyof的妙用

案例1 1、如果&#xff0c;有一个接口&#xff0c;某个变量的类型&#xff0c;是这个接口的 key &#xff1f; keyof 后面可以跟 一个对象类型或者一个接口类型keyof 是把后面 对象或者接口 的 键 都提取出来&#xff0c;组成一个联合类型 interface IStudentAttr {name: stri…

低代码开发如何快速构建AI应用

随着人工智能&#xff08;AI&#xff09;的快速发展&#xff0c;越来越多的企业和开发者开始意识到AI在业务和应用中的重要性。然而&#xff0c;AI应用的开发通常被认为是复杂和耗时的过程&#xff0c;需要大量的编码和数据科学知识。为了解决这个问题&#xff0c;低代码开发平…

嵌入式C语言变量、数组、指针初始化的多种操作

在敲代码的时候&#xff0c;我们会给变量一个初始值&#xff0c;以防止因为编译器的原因造成变量初始值的不确定性。 对于数值类型的变量往往初始化为0&#xff0c;但对于其他类型的变量&#xff0c;如字符型、指针型等变量等该如何初始化呢&#xff1f; 数值类变量初始化 整…

如何掌握热门话题视频号的秘诀

在今天的数字化时代&#xff0c;社交媒体已经成为人们获取信息、分享观点和娱乐的主要平台之一。其中&#xff0c;微信视频号因其独特的功能和广泛的用户基础&#xff0c;成为了许多人展示自我、实现梦想的重要途径。那么&#xff0c;如何才能成功地运营一个热门话题的视频号呢…

docker-harbor的私有仓库

目录 harbor的特性 harbor的组件 docker-harbor部署 Docker1 页面访问 ​编辑 上传镜像 创建项目 创建用户 给项目创建成员 上传私有仓库 docker2(远程主机上传) 如何实现仓库之间进行同步 docker3 实现远程仓库同步 仓库 保存镜像 私有&#xff0c;自定义用户…

TSINGSEE青犀城市道路积水AI检测算法视频智能监管解决方案

近年来&#xff0c;由于城市区域内涝频发&#xff0c;遇到强降水天气出现路面严重积水的情况时有发生&#xff0c;影响交通通行甚至引发事故。所以&#xff0c;对下穿隧道、下沉式道路等路面积水情况的监测显得尤为重要。传统的监管方式很难及时发现道路积水情况&#xff0c;那…

wgcloud访问页面如何加前缀/wgcloud

nginx配置实现加/wgcloud - WGCLOUD

数据结构-07-二叉树

前面学习的栈、队列等等都是线性表结构。树是一种非线性表结构&#xff0c;比线性表的数据结构要复杂。 1-树tree “树”这种数据结构类似我们现实生活中的“树”&#xff0c;这里面每个元素我们叫作“节点”&#xff1b;用来连线相邻节点之间的关系&#xff0c;我们叫作“父子…

【深度学习】强化学习(四)强化学习的值函数

文章目录 一、强化学习问题1、交互的对象2、强化学习的基本要素3、策略&#xff08;Policy&#xff09;4、马尔可夫决策过程5、强化学习的目标函数6、值函数1. 状态值函数&#xff08;State Value Function&#xff09;a. 状态值函数的定义b. 贝尔曼方程&#xff08;Bellman Eq…

现代C++ 实现单例模式

传统写法有什么问题 如果你了解过单例模式&#xff0c;双重检查锁定模式&#xff08;Double-Checked Locking Pattern&#xff0c;后文简称DCLP&#xff09;的写法你一定不会陌生&#xff0c;甚至你或许认为它是最正确的代码。 class Singleton { public://获取单例Singleton…

c# 为什么修改Font导致Location 变化

搜索引擎、各种人工智能&#xff0c;只有这个帮我解决了问题 然后我发现了这个 我就奇怪&#xff0c;一行行调试代码&#xff0c;最终发现设置Font&#xff0c;Location就变了&#xff0c;完全想不通

【C语言(十三)】

自定义类型&#xff1a;结构体 一、结构体类型的声明 1.1、结构体回顾 结构是⼀些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 1.1.1、结构的声明 例如描述⼀个学生&#xff1a; struct Stu {char name[20];//名字int age;//年龄c…

又有AI工具啦~视频直接变动漫风格

把视频变成动漫风 - DOMO AI 看到网上发的把一段真的视频&#xff0c;转为动漫风格&#xff0c;是用的DOMO AI做的&#xff0c;就试了一下。 效果 随便找了个视频转为动漫风&#xff1a; 原视频 test_output 操作 1 、去Discord上搜索DOMO AI&#xff0c;加入社区。 2、选择…

vscode的文件和文件夹的警告标志如何消去

由于平时用vscode写一些java的小demo, 但是这个vscode的警告和错误管理很奇怪, 这个警告信息会显示在这个侧边的文件和文件夹中, 我上网上找能不能把这个给去掉的办法, 找了半天没找到。 于是我就自己去查了一下这个vscode的设置, 真让我找到了这方面的开关, 把下面的这个关闭…

win10 node-red安装及管理配置

win10 node-red安装及管理配置 一、安装node.js环境二、安装node-red环境2.1 node-red安装2.2 node-red安全登录方式 三、pm2管理node-red服务3.1 安装pm23.2 pm2管理node-red服务 四、常用命令4.1 npm命令4.2 pm2命令 更多 本文旨在详细介绍windows10系统下的node-red开发配置…

理解数字化转型:3个阶段、2个分类和3类价值

导读&#xff1a;数字化转型是基于IT技术提供业务所需要的支持&#xff0c;让业务和技术真正产生交互而诞生的。我们可以从概念及内涵、分类、价值等多个维度来理解企业数字化转型。 01 数字化转型的概念及内涵 数字化转型运用5G、人工智能、大数据、云计算等新一代数字技术&a…

最新盲盒交友脱单系统源码

盲盒交友脱单系统源码&#xff0c;学校 爱好 城市 地区 星座等等&#xff0c;首页轮转广告&#xff0c;页面美化&#xff0c;首页两款连抽高质量底部连抽&#xff0c;后台选择开关&#xff0c;邀请奖励爱心或者&#xff0c;提现达到金额有提成奖励&#xff0c;二级分销&#xf…