重生之我要当前端大王--node篇--03express连接数据库

重生之我要当前端大王–node篇

第一篇章 后端服务篇–nodeJS启动!

03 数据库交互

前言

阅读本章可学习到express如何与数据库交互,写一个curd,这里数据库选用的是关系型数据库mysql

一、如何建立数据库联系

首先安装数据库依赖: pnpm i mysql2

建立一个单独文件写数据库配置,这里我是在src下的db文件夹的index.js书写配置
import mysql2 from 'mysql2'
const db=mysql2.createConnection({
    host:"localhost",//数据库主机地址
    port:3306,//端口号
    user:"root",//用户名
    password:"831153",//数据密码
    database:"ws49"//数据库库名
})
export default db//导出数据库实例

这样我们便可以使用导出的db实例执行sql~

二、如何执行sql

这里我在user路由下演示查询sql操作~

import express from 'express'
import db from '../db/index.js'//导入数据库实例
 const router=express.Router()//获取路由实例
 //创建一个get请求,查询banner数据
router.get('/banner',(req,res)=>{
		//编写sql
     let sqlStr='select * from banner'
	//通过db.query方法执行sql,第一个参数放入sql语句,
	//第二个传入一个回调函数接收结果
    db.query(sqlStr,(err,data)=>{
        if(err){
        //执行sql错误的话,抛出一个异常
 	throw new Error('数据查询失败: ' + err.message);
        }
        //查询成功,格式一下返回格式返回给前端
        res.json({
            code:200,
            msg:'成功',
            data
        })
    })
})
export default router

这样我们就编写好一个与数据库交互的查询接口,
我们起一下服务看一下是否成功,使用node index.js启动服务,打开浏览器输入http://localhost:3000/user/banner
在这里插入图片描述
成功查询到数据库banner表的所有数据,成功返回给前端

三、ok,接下来让我们写一个简单curd巩固一下

增加操作

router.post('/addBanner',(req,res)=>{
    const {url,alt,desc}=req.body
    //使用?占位符占位,desc是MySQL的一个保留字需要特殊处理一下
    let sqlStr='insert into banner (url,alt,`desc`) values(?,?,?)'
  //第一个参数传入sql语句,第二个参数传入要插入的值,第三个参数传入一个回调函数
    db.query(sqlStr,[url,alt,desc],(err,data)=>{
        if(err){
      throw new Error('数据增加失败: ' + err.message);
        }
         //增加成功返回影响行数
        if(data.affectedRows==1){
           res.send('ok')
        }
    })
})

通过postman send一下查看结果,增加成功返回ok
在这里插入图片描述

修改操作

router.post('/upBanner', (req, res) => {
    const { url, alt, desc, id } = req.body;
    let sqlStr = 'update banner set url=?, alt=?, `desc`=? where id=?';
    //第一个参数传入sql语句,第二个参数传入要插入的值,第三个参数传入一个回调函数
    db.query(sqlStr, [url, alt, desc, id], (err, data) => {
      if (err) {
         throw new Error('数据库修改失败: ' + err.message);
      }
      //修改成功返回影响行数
      if (data.affectedRows == 1) {
        res.send('ok');
      } else {
        res.status(404).json({ message: '未找到对应的数据,请检查参数' });
      }
    });
  });

通过postman send一下查看结果,修改成功返回ok
在这里插入图片描述

删除操作

删除操作分俩种,一种使用update修改状态值,一种使用delete


//第一种,使用update
  router.delete('/delBanner', (req, res) => {
    const { id } = req.body;
    //code0-标记删除 1-正常
    let sqlStr = 'update banner set code=0 where id=?';
    db.query(sqlStr, id, (err, data) => {
      if (err) {
       throw new Error('数据删除失败: ' + err.message);
      }
       //删除成功返回影响行数
      if (data.affectedRows == 1) {
        res.send('删除成功');
      } else {
        res.status(404).json({ message: '未找到对应的数据,请检查参数' });
      }
    });
  });
  
//第二种,使用delete,传入要删除行对应id
router.delete('/delBanner', (req, res) => {
    const { id } = req.body;
    let sqlStr = 'delete from banner  where id=?';
    db.query(sqlStr, id, (err, data) => {
      if (err) {
           throw new Error('数据删除失败: ' + err.message);
      }
      //删除成功返回影响行数
      if (data.affectedRows == 1) {
        res.send('删除成功');
      } else {
        res.status(404).json({ message: '未找到对应的数据,请检查参数' });
      }
    });
  });

在这里插入图片描述

总结

看到这,你已经学会了如何使用express进行数据库交互,成功编写了一个curd,,快和小英家的牛一起来操作一下sql吧,下一篇讲一讲ORM框架knex,更便捷操作sql语句,敬请期待,你的点赞是我更新的动力。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值