重生之我要当前端大王–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语句,敬请期待,你的点赞是我更新的动力。