一、下载导入模块
pnpm i express
pnpm i mysql2
const express = require("express");
const app = express();
app.use(express.json());
const MySQL = require("mysql2");
const 数据库 = MySQL.createConnection({
host: "localhost", // 主机地址
user: "root", // 用户名
password: "123456", // 密码
port: 3307, // 端口号,默认为 3306
database: "教室数据", // 数据库名称
connectTimeout: 10000, // 连接超时时间,单位为毫秒
multipleStatements: false, // 是否允许一个 query 中有多个 MySQL 语句,默认为 false
});
app.use(express.json()) 是一个 Express 中间件函数,它的作用是解析传入的请求体,并将其转换为 JSON 格式。
当客户端发送一个包含 JSON 数据的请求时,express.json() 中间件会解析请求体,并将其转换为 JavaScript 对象,使得我们可以在后续的处理程序中方便地访问和操作这些数据。`
二、链接数据库,启动服务器
node 文件名
测试链接是否正常
注:请先开启数据库再启动项目
数据库.connect((err) => {
if (err) {
console.error("连接数据库失败:", err.stack);
return;
}
console.log("成功连接到数据库");
});
app.listen(3080, () => {
console.log("服务器运行中");
console.log("http://localhost:3080");
});
推荐使用Apifox进行接口测试
三、增删改查
1.增
app.post("/api/add", (req, res) => {
console.log(req.query, req.params, req.body);
let SQL =
"INSERT INTO 信息表(ID,日期,时间,姓名,位置,信息) VALUES(?,?,?,?,?,?)";
数据库.query(
SQL,
[
req.body.ID,
req.body.日期,
req.body.时间,
req.body.姓名,
req.body.位置,
req.body.信息,
],
(err, result) => {
if (err) {
console.log(err);
res.send("服务器错误");
} else {
//res.send("插入成功");
res.send(JSON.stringify(result));
}
}
);
});
请求与返回
请求的数据结构
{
ID: 6872743656,
'位置': '天津 天津市 河西区',
'信息': '无',
'姓名': '江艳',
'日期': '1995-06-14',
'时间': '2024-01-03 16:02:15'
}
返回的数据结构
{
"fieldCount": 0,
"affectedRows": 1,
"insertId": 0,
"info": "",
"serverStatus": 2,
"warningStatus": 0,
"changedRows": 0
}
fieldCount:结果集中的字段数量。对于 INSERT、UPDATE 和 DELETE 查询,这个值通常为 0。affectedRows:查询影响的行数。对于 INSERT、UPDATE 和 DELETE 查询,这是被插入、更新或删除的行数。insertId:插入操作生成的自增 ID。如果查询是一个 INSERT 操作,并且插入的表有一个自增字段,那么这个值就是新插入的行的自增 ID。info:包含额外信息的字符串,例如影响的行数、插入的 ID 等。serverStatus:服务器状态的数字表示。这是一个从服务器返回的内部值,通常不需要在应用程序中使用。warningStatus:警告的数量。如果查询产生了警告,这个值就是警告的数量。changedRows:更新操作改变的行数。对于 UPDATE 查询,这是实际被改变的行数(即新值与旧值不同的行数)。注意这个值与affectedRows不同,affectedRows是匹配 WHERE 子句条件的行数,而changedRows是实际被改变的行数。
2.删
app.post("/api/delete", (req, res) => {
数据库.query(
"DELETE FROM 信息表 WHERE ID = ?",
[req.body.ID],
(err, result) => {
if (err) {
console.log(err);
res.send("服务器错误");
} else {
res.send("删除成功");
}
}
);
});
请求与返回
请求的数据结构
{
ID: 6872743656
}
返回的数据结构
{
"fieldCount": 0,
"affectedRows": 1,
"insertId": 0,
"info": "",
"serverStatus": 2,
"warningStatus": 0,
"changedRows": 0
}
3.改
app.post("/api/update", (req, res) => {
数据库.query(
"UPDATE 信息表 SET 日期 = ?,时间 = ?,姓名 = ?,位置 = ?,信息 = ? WHERE ID = ?",
[
req.body.日期,
req.body.时间,
req.body.姓名,
req.body.位置,
req.body.信息,
req.body.ID,
],
(err, result) => {
if (err) {
console.log(err);
res.send("服务器错误");
} else {
res.send("更新成功");
}
}
);
});
请求与返回
请求的数据结构
{
ID: 6872743656,
'位置': '河西区',
'信息': '无',
'姓名': '大大',
'日期': '1995-06-01',
'时间': '2024-01-05 16:02:15'
}
返回的数据结构
{
"fieldCount": 0,
"affectedRows": 1,
"insertId": 0,
"info": "Rows matched: 1 Changed: 1 Warnings: 0",
"serverStatus": 2,
"warningStatus": 0,
"changedRows": 1
}
4.查
app.post("/api/Query", (req, res) => {
数据库.query(
"SELECT * FROM 信息表 WHERE 日期 = ?",
[req.body.日期],
(err, result) => {
if (err) {
console.log(err);
res.send("服务器错误");
} else {
res.send(result);
}
}
);
});
完整代码
注:创建表时,如果设置了主键,并且主键是数字类型,实现自增,便不需要再传入ID值
const express = require("express");
const app = express();
const MySQL = require("mysql2");
app.use(express.json());
const 数据库 = MySQL.createConnection({
host: "localhost", // 主机地址
user: "root", // 用户名
password: "123456", // 密码
port: 3307, // 端口号,默认为 3306
database: "教室数据", // 数据库名称
connectTimeout: 10000, // 连接超时时间,单位为毫秒
multipleStatements: false, // 是否允许一个 query 中有多个 MySQL 语句,默认为 false
});
数据库.connect((err) => {
if (err) {
console.error("连接数据库失败:", err.stack);
return;
}
console.log("成功连接到数据库");
});
app.listen(3080, () => {
console.log("服务器运行中");
console.log("http://localhost:3080");
});
app.post("/api/Query", (req, res) => {
console.log(req.body);
数据库.query(
"SELECT * FROM 信息表 WHERE 日期 = ?",
[req.body.日期],
(err, result) => {
if (err) {
console.log(err);
res.send("服务器错误");
} else {
res.send(result);
}
}
);
});
app.post("/api/add", (req, res) => {
console.log(req.query, req.params, req.body);
数据库.query(
"INSERT INTO 信息表(ID,日期,时间,姓名,位置,信息) VALUES(?,?,?,?,?,?)",
[
req.body.ID,
req.body.日期,
req.body.时间,
req.body.姓名,
req.body.位置,
req.body.信息,
],
(err, result) => {
if (err) {
console.log(err);
res.send("服务器错误");
} else {
res.send("插入成功");
}
}
);
});
app.post("/api/delete", (req, res) => {
console.log(req.query, req.params, req.body);
数据库.query(
"DELETE FROM 信息表 WHERE ID = ?",
[req.body.ID],
(err, result) => {
if (err) {
console.log(err);
res.send("服务器错误");
} else {
res.send("删除成功");
}
}
);
});
app.post("/api/update", (req, res) => {
console.log(req.query, req.params, req.body);
数据库.query(
"UPDATE 信息表 SET 日期 = ?,时间 = ?,姓名 = ?,位置 = ?,信息 = ? WHERE ID = ?",
[
req.body.日期,
req.body.时间,
req.body.姓名,
req.body.位置,
req.body.信息,
req.body.ID,
],
(err, result) => {
if (err) {
console.log(err);
res.send("服务器错误");
} else {
res.send("更新成功");
}
}
);
});