创建数据库操作模块的步骤为:
- 导入数据库模块
const mysql = require(“mysql”) - 创建数据库连接
const db = mysql.createPool({
host:‘服务器地址’,
user:‘数据库用户名’,
password:‘数据库密码’,
database:‘数据库名称’
}) - 创建请求监听事件
- 在请求监听事件里面通过数据库连接调用query方法,并写入当前监听地址的sql语句,准备对数据库进行操作
- 通过db.query里面的回调函数值err是否存在,来判断数据库是否连接成功(和fs模块的读写操作类似)
- 如果连接成功了,则通过db.query()中写好的sql语句进行操作,并根据数据库操作时,数据库端中的data.affectedRows相应值进行判定是否操作成功,如果操作成功,则响应值为1,否则return中断代码执行,并返回一个错误提示
- 据此,确认成功之后,才通过请求事件监听的res.send()方法,向客户端响应数据
参考实例
单纯的数据库操作模块并不需要创建web服务器,在以下实例演示过程中,创建web服务器是为了对数据库操作进行验证
const express = require("express"); // 导入express服务器模块
const mysql = require("mysql"); //导入数据库模块
const app = express(); //创建服务器
app.use(express.urlencoded({ extended: false })); //导入urlencoded内置模块,对传入的application类型数据进行转码,让其可以被读取,如果不写,在读取该类型数据时会返回undefined
const db = mysql.createPool({ //创建一个数据库连接,后面的监听请求通过其内的query方法对数据库内的数据进行处理
host: "127.0.0.1", //表示连接哪一个服务器上的mysql数据库,此处填写的是本地数据库
user: "root", //数据库的用户名,root是默认用户名
password: "root", // 数据库的密码,root是默认密码
database: "ljh", //数据库名称
});
// 查询模块
app.get("/getuser", (req, res) => { //设置一个查询监听事件,/getuser是请求监听的地址名
db.query("select * from user", (err, data) => {
if (err) return console.log(err.message);// 验证测试对象是否连接成功
if (data.length == 0) return console, log("表里面没有数据");
res.send({
status: 0,
msg: "get请求成功",
data: data,
});
});
});
// 添加模块
app.post("/postuser", (req, res) => {
const data = req.body;
db.query("insert into user set ?", data, (err, data) => { //这里的?作用是将sql语句进行动态的拼接,以保证对客户端请求的不同数据对sql库中相应的值进行调用
if (err) return console.log(err.message);
//通过数据库写入成功时出现的affectedRows=1作为依据,判断数据是否写入成功
if (data.affectedRows != 1) return console.log("数据写入失败");
res.send({
status: 0,
msg: "数据写入成功",
});
});
});
// 更改模块
app.post("/updateuser", (req, res) => {
const data = req.body;
db.query("update user set ? where id =?", [data, data.id], (err, data) => { // 通过数组的形式写入,第一个数组元素传给第一个?,第二个数组元素传给第二个?
if (err) {
return console.log("err.message");
}
if (data.affectedRows != 1) {
return console.log("数据库更新时失败");
}
res.send({
status: 0,
msg: "数据更新成功",
data: data,
});
});
});
// 删除模块
app.get("/deluser/:id", (req, res) => {
const params = req.params.id; // 动态获取客户端传入的id参数
db.query("delete from user where id = ?", params, (err, data) => { // sql删除语句,拼接上id,表示对当前id绑定的数据组进行操作
if (err) {
return console.log(err.message);
}
if (data.affectedRows != 1) {
return console.log("数据删除失败");
}
res.send({
status: 0,
msg: "数据删除成功",
});
});
});
*//假删除模块 该模块出现原因是因为数据删除是不可逆的操作,所以通常使用更改status显示来操作,方便数据的找回*
app.get("/undeluser/:id", (req, res) => {
const params = req.params.id;
db.query("update user set status = 0 where id = ?", params, (err, data) => {
if (err) {
return console.log(err.message);
}
if (data.affectedRows != 1) {
return console.log("数据假删除失败");
}
res.send({
status: 0,
msg: "数据假删除成功",
data: data,
});
});
});
app.listen(5000, () => { // 开启服务器,进行测试
console.log("http://127.0.0.1:5000");
});
常用sql语句的语法可以查看作者另一篇数据库语句的文章