❤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', // 数据库主机地址,如果是本地数据库则使用localhost
  user: '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 刷新数据库,果然我们删除已经成功了!

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

相关推荐
数据库小组25 分钟前
2026 年,MySQL 到 SelectDB 同步为何更关注实时、可观测与可校验?
数据库·mysql·数据库管理工具·数据同步·ninedata·selectdb·迁移工具
华科易迅28 分钟前
MybatisPlus增删改查操作
android·java·数据库
Kethy__1 小时前
计算机中级-数据库系统工程师-计算机体系结构与存储系统
大数据·数据库·数据库系统工程师·计算机中级
SHoM SSER1 小时前
MySQL 数据库连接池爆满问题排查与解决
android·数据库·mysql
熬夜的咕噜猫1 小时前
MySQL备份与恢复
数据库·oracle
jnrjian2 小时前
recover database using backup controlfile until cancel 假recover,真一致
数据库·oracle
lifewange2 小时前
java连接Mysql数据库
java·数据库·mysql
大妮哟3 小时前
postgresql数据库日志量异常原因排查
数据库·postgresql·oracle
还是做不到嘛\.3 小时前
Dvwa靶场-SQL Injection (Blind)-基于sqlmap
数据库·sql·web安全
不写八个3 小时前
PHP教程004:php链接mysql数据库
数据库·mysql·php