From 991993e0c2d2e78ac229587d52d48e834fd7099e Mon Sep 17 00:00:00 2001 From: Seven <1530011482@qq.com> Date: Tue, 22 Sep 2026 14:59:38 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=96=87=E4=BB=B6=E7=BB=93?= =?UTF-8?q?=E6=9E=84=EF=BC=8C=E5=B0=86=E6=8E=A5=E5=8F=A3=E5=88=86=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.js | 2 + routes/message.js | 161 ++++++++++++++++++++++++++++++++++++++++++++++ routes/user.js | 156 -------------------------------------------- 3 files changed, 163 insertions(+), 156 deletions(-) create mode 100644 routes/message.js diff --git a/index.js b/index.js index 60b508f..35393b8 100644 --- a/index.js +++ b/index.js @@ -12,10 +12,12 @@ app.use(express.json()); // 接入路由 const loginRouter = require("./routes/login"); const userRouter = require("./routes/user"); +const messageRouter = require("./routes/message"); // 所有接口,都统一加上 /api 前缀 app.use("/api", loginRouter); app.use("/api", userRouter); +app.use("/api", messageRouter); // 启动服务器,监听端口 app.listen(3000, () => { diff --git a/routes/message.js b/routes/message.js new file mode 100644 index 0000000..7433195 --- /dev/null +++ b/routes/message.js @@ -0,0 +1,161 @@ +const express = require("express"); +const router = express.Router(); +const db = require("../db/mysql"); +const authMiddleware = require("../middleware/authMiddleware"); + +// 获取最近联系人的最后一条聊天消息 +router.get( + "/recentChats", + authMiddleware, + (req, res) => { + const currentUserName = req.user.username; + const sql = ` + SELECT + contact_name, + content, + created_at + FROM ( + SELECT + CASE + WHEN sender_name = ? THEN receiver_name + ELSE sender_name + END AS contact_name, + content, + created_at, + ROW_NUMBER() OVER ( + PARTITION BY + CASE + WHEN sender_name = ? THEN receiver_name + ELSE sender_name + END + ORDER BY created_at DESC + ) AS rn + FROM chat_mysql.messages + WHERE sender_name = ? + OR receiver_name = ? + ) t + WHERE rn = 1 + ORDER BY created_at DESC; + `; + db.query(sql, [currentUserName, currentUserName, currentUserName, currentUserName], (error, results) => { + if (error) { + console.error("数据库查询失败:", error); + + return res.status(500).json({ + code: 500, + message: "查询失败", + }); + } + if (results.length > 0) { + res.json({ + code: 200, + message: "查询成功", + data: { + recentChats: results.map(message => ({ + contactName: message.contact_name, + content: message.content, + createdAt: message.created_at + })) + }, + }); + } else { + res.json({ + code: 401, + message: "未找到联系人消息", + data: { + recentChats: [] + } + }); + } + }); + + } +); + +// 获取某个联系人的最近n条聊天消息,分页获取 +router.post( + "/contactMessagesInfo", + authMiddleware, + (req, res) => { + const currentUserName = req.user.username; + const { contactName, limit, offset } = req.body; + const sql = ` + SELECT + id, + sender_name, + receiver_name, + content, + created_at + FROM chat_mysql.messages + WHERE (sender_name = ? OR receiver_name = ?) AND (sender_name = ? OR receiver_name = ?) + ORDER BY created_at DESC LIMIT ? OFFSET ?; + `; + db.query(sql, [currentUserName, currentUserName, contactName, contactName, limit, offset], (error, results) => { + if (error) { + console.error("数据库查询失败:", error); + + return res.status(500).json({ + code: 500, + message: "查询失败", + }); + } + if (results.length > 0) { + res.json({ + code: 200, + message: "查询成功", + data: { + messages: results.map(message => ({ + messageId: message.id, + senderName: message.sender_name, + receiverName: message.receiver_name, + content: message.content, + createdAt: message.created_at + })) + }, + }); + } else { + res.json({ + code: 401, + message: "未找到联系人消息", + data: { + messages: [] + } + }); + } + }); + + } +); + +// 写入聊天消息 +router.post("/sendMessage", (req, res) => { + const message = req.body; + const sql = ` + INSERT INTO messages + (sender_name, receiver_name, content) + VALUES (?, ?, ?) + `; + + db.query(sql, [ + message.senderName, + message.receiverName, + message.content + ], (error, result) => { + if (error) { + console.error(error); + + return res.status(500).json({ + code: 500, + message: "发送消息失败", + }); + } + + res.json({ + code: 200, + message: "发送消息成功", + data: null + }); + }); +}); + +module.exports = router; \ No newline at end of file diff --git a/routes/user.js b/routes/user.js index 0c2f800..6bff2e3 100644 --- a/routes/user.js +++ b/routes/user.js @@ -65,160 +65,4 @@ router.get( } ); -// 获取最近联系人的最后一条聊天消息 -router.get( - "/recentChats", - authMiddleware, - (req, res) => { - const currentUserName = req.user.username; - const sql = ` - SELECT - contact_name, - content, - created_at - FROM ( - SELECT - CASE - WHEN sender_name = ? THEN receiver_name - ELSE sender_name - END AS contact_name, - content, - created_at, - ROW_NUMBER() OVER ( - PARTITION BY - CASE - WHEN sender_name = ? THEN receiver_name - ELSE sender_name - END - ORDER BY created_at DESC - ) AS rn - FROM chat_mysql.messages - WHERE sender_name = ? - OR receiver_name = ? - ) t - WHERE rn = 1 - ORDER BY created_at DESC; - `; - db.query(sql, [currentUserName, currentUserName, currentUserName, currentUserName], (error, results) => { - if (error) { - console.error("数据库查询失败:", error); - - return res.status(500).json({ - code: 500, - message: "查询失败", - }); - } - if (results.length > 0) { - res.json({ - code: 200, - message: "查询成功", - data: { - recentChats: results.map(message => ({ - contactName: message.contact_name, - content: message.content, - createdAt: message.created_at - })) - }, - }); - } else { - res.json({ - code: 401, - message: "未找到联系人消息", - data: { - recentChats: [] - } - }); - } - }); - - } -); - -// 获取某个联系人的最近n条聊天消息,分页获取 -router.post( - "/contactMessagesInfo", - authMiddleware, - (req, res) => { - const currentUserName = req.user.username; - const { contactName, limit, offset } = req.body; - const sql = ` - SELECT - id, - sender_name, - receiver_name, - content, - created_at - FROM chat_mysql.messages - WHERE (sender_name = ? OR receiver_name = ?) AND (sender_name = ? OR receiver_name = ?) - ORDER BY created_at DESC LIMIT ? OFFSET ?; - `; - db.query(sql, [currentUserName, currentUserName, contactName, contactName, limit, offset], (error, results) => { - if (error) { - console.error("数据库查询失败:", error); - - return res.status(500).json({ - code: 500, - message: "查询失败", - }); - } - if (results.length > 0) { - res.json({ - code: 200, - message: "查询成功", - data: { - messages: results.map(message => ({ - messageId: message.id, - senderName: message.sender_name, - receiverName: message.receiver_name, - content: message.content, - createdAt: message.created_at - })) - }, - }); - } else { - res.json({ - code: 401, - message: "未找到联系人消息", - data: { - messages: [] - } - }); - } - }); - - } -); - -// 写入聊天消息 -router.post("/sendMessage", (req, res) => { - const message = req.body; - const sql = ` - INSERT INTO messages - (sender_name, receiver_name, content) - VALUES (?, ?, ?) - `; - - db.query(sql, [ - message.senderName, - message.receiverName, - message.content - ], (error, result) => { - if (error) { - console.error(error); - - return res.status(500).json({ - code: 500, - message: "发送消息失败", - }); - } - - res.json({ - code: 200, - message: "发送消息成功", - data: null - }); - }); -}); - - module.exports = router; \ No newline at end of file