const express = require('express') const cors = require('cors') const bodyParser = require('body-parser') const app = express() // 使用cors中间件来允许跨域请求 app.use(cors()) app.use(bodyParser.json()) const port = 10007 // 端口号 // 模拟一个 topics 数组 const topics = [ // 帖子的数组 { topicId: 1, topicTitle: '啊这可海星啊这可海星啊这可海星啊这可海星啊这可海星', topicFloorCount: 1, topicContent: '

啊这可海星

', topicPublishTime: Date.now(), topicPopularity: 100, topicTags: ['啊这可海星', '啊这可海星'], topicUpvotes: 1007, topicViews: 10007, topicLikes: 1007, topicDislikes: 17, topicPartition: ['galgame'], topicReplies: { reply: [ // 存放了所有帖子的回复 { replyId: 1, replier: { avatar: './assets/images/topic.jpg', name: '鲲鲲鲲', cutenessPoints: 107, }, repliedTo: 'KUN', isEdited: true, editedTimestamp: Date.now(), replyTime: Date.now(), /* 此处过滤掉文本样式,评论只保留纯文本 */ replyContent: '鲲鲲鲲', replyUpvotes: 1, replyLikes: 100, replyDislikes: 10, replyComments: [ { commentId: 1, commenterAvatar: './assets/images/favicon.png', commenterName: '啊这可海星', commentedTo: 'azkhx', commentUpvotes: 5, commentDislikes: 1, commentContent: '鲲鲲鲲鲲鲲,啊这可海星', }, { commentId: 2, commenterAvatar: './assets/images/favicon.png', commenterName: '啊这可海星', commentedTo: 'azkhx', commentUpvotes: 5, commentDislikes: 1, commentContent: '鲲鲲鲲鲲鲲,啊这可海星', }, { commentId: 3, commenterAvatar: './assets/images/favicon.png', commenterName: '啊这可海星', commentedTo: 'azkhx', commentUpvotes: 5, commentDislikes: 1, commentContent: '鲲鲲鲲鲲鲲,啊这可海星', }, ], replyCount: 1, }, { replyId: 2, replier: { avatar: './assets/images/topic.jpg', name: 'KUN', cutenessPoints: 107, }, repliedTo: 'KUN', isEdited: true, editedTimestamp: Date.now(), replyTime: Date.now(), replyContent: '鲲鲲鲲', replyUpvotes: 1, replyLikes: 100, replyDislikes: 10, replyComments: [ { commentId: 1, commenterAvatar: './assets/images/favicon.png', commenterName: '啊这可海星', commentedTo: '鲲鲲鲲', commentUpvotes: 5, commentDislikes: 1, /* 此处过滤掉文本样式,评论只保留纯文本 */ commentContent: '鲲鲲鲲鲲鲲,啊这可海星', }, ], replyCount: 1, }, ], replyCount: 1, }, topicStatus: '正常', topicIsEdited: false, topicAuthor: { avatar: './assets/images/KUN.jpg', name: 'KUN', cutenessPoints: 1007, }, }, { topicId: 2, topicTitle: '啊这可海星啊这可海星啊这可海星啊这可海星啊这可海星', topicFloorCount: 1, topicContent: '

啊这可海星

', topicPublishTime: Date.now(), topicPopularity: 100, topicTags: ['啊这可海星', '啊这可海星'], topicUpvotes: 1007, topicViews: 10007, topicLikes: 1007, topicDislikes: 17, topicPartition: ['galgame', '技术交流'], topicReplies: { reply: [ // 存放了所有帖子的回复 { replyId: 1, replier: { avatar: './assets/images/topic.jpg', name: '鲲鲲鲲', cutenessPoints: 107, }, repliedTo: 'KUN', isEdited: true, editedTimestamp: Date.now(), replyTime: Date.now(), /* 此处过滤掉文本样式,评论只保留纯文本 */ replyContent: '鲲鲲鲲', replyUpvotes: 1, replyLikes: 100, replyDislikes: 10, replyComments: [ { commentId: 1, commenterAvatar: './assets/images/favicon.png', commenterName: '啊这可海星', commentedTo: 'azkhx', commentUpvotes: 5, commentDislikes: 1, commentContent: '鲲鲲鲲鲲鲲,啊这可海星', }, { commentId: 2, commenterAvatar: './assets/images/favicon.png', commenterName: '啊这可海星', commentedTo: 'azkhx', commentUpvotes: 5, commentDislikes: 1, commentContent: '鲲鲲鲲鲲鲲,啊这可海星', }, { commentId: 3, commenterAvatar: './assets/images/favicon.png', commenterName: '啊这可海星', commentedTo: 'azkhx', commentUpvotes: 5, commentDislikes: 1, commentContent: '鲲鲲鲲鲲鲲,啊这可海星', }, ], replyCount: 1, }, { replyId: 2, replier: { avatar: './assets/images/topic.jpg', name: 'KUN', cutenessPoints: 107, }, repliedTo: 'KUN', isEdited: true, editedTimestamp: Date.now(), replyTime: Date.now(), replyContent: '鲲鲲鲲', replyUpvotes: 1, replyLikes: 100, replyDislikes: 10, replyComments: [ { commentId: 1, commenterAvatar: './assets/images/favicon.png', commenterName: '啊这可海星', commentedTo: '鲲鲲鲲', commentUpvotes: 5, commentDislikes: 1, /* 此处过滤掉文本样式,评论只保留纯文本 */ commentContent: '鲲鲲鲲鲲鲲,啊这可海星', }, ], replyCount: 1, }, ], replyCount: 1, }, topicStatus: '正常', topicIsEdited: false, topicAuthor: { avatar: './assets/images/KUN.jpg', name: 'KUN', cutenessPoints: 1007, }, }, ] // 模拟用户数据 const users = [ { registrationSequence: 1, username: 'KUN', email: 'kun@kungal.com', token: 'KUNGalgame', avatar: './assets/images/KUN.jpg', registrationTime: Date.now(), moemoepoint: 1007, bio: '鲲最可爱!', likesCount: 1007, commentsCount: 50, repliesCount: 20, likedTopicsCount: 5, repliedTopicsCount: 1007, pushedTopicsCount: 3, userTopics: { likedTopicIds: [1, 2, 3], repliedTopicIds: [4, 5], pushedTopicIds: [6, 7, 8], }, publishedCommentsCount: 10, publishedCommentIds: [1, 2, 3, 4, 5], }, { registrationSequence: 2, username: 'YUYU', email: 'yuyu@kungal.com', token: 'azkhx', avatar: './assets/images/topic.jpg', registrationTime: Date.now(), cutePoints: 11000, bio: '啊这可海星', likesCount: 1007, commentsCount: 20, repliesCount: 10, likedTopicsCount: 2, repliedTopicsCount: 1007, pushedTopicsCount: 1, userTopics: { likedTopicIds: [9, 10], repliedTopicIds: [11], pushedTopicIds: [12], }, publishedCommentsCount: 5, publishedCommentIds: [6, 7, 8, 9, 10], }, ] // 定义用户JSON数据的路由 app.get('/kungalgamer/:id', (req, res) => { const userId = parseInt(req.params.id) const user = users.find((user) => user.registrationSequence === userId) if (!user) { res.status(404).json({ error: 'User not found' }) } else { res.json(user) } }) // 获取指定帖子的路由 app.get('/topic/:id', (req, res) => { const topicId = parseInt(req.params.id) const topic = topics.find((topic) => topic.topicId === topicId) if (topic) { res.json(topic) } else { res.status(404).json({ error: 'Topic Not Found!' }) } }) // 获取帖子回复的路由 app.get('/topic/reply/:id', (req, res) => { const replyId = parseInt(req.params.id) let targetReply for (const topic of topics) { const reply = topic.topicReplies.reply.find( (reply) => reply.replyId === replyId ) if (reply) { targetReply = reply break } } if (targetReply) { res.json(targetReply) } else { res.status(404).json({ error: 'Reply not found!' }) } }) // 获取评论的路由 app.get('/topic/reply/comment/:id', (req, res) => { const replyId = Number(req.params.id) // 在帖子数据中查找指定回复 const reply = topics .flatMap((topic) => topic.topicReplies.reply) .find((reply) => reply.replyId === replyId) if (!reply) { res.status(404).json({ error: 'Comment not found' }) } else { res.json(reply.replyComments) } }) // 登录 app.post('/api/login', (req, res) => { const { email, password } = req.body // 登录逻辑 if (email === 'kun@kungal.com' && password === '1007') { // 登陆成功 const token = 'KUNGalgame' res.json({ success: true, token }) } else { // 登陆失败 res.status(401).json({ success: false, error: 'Invalid email or password' }) } }) // 注册 app.post('/api/register', (req, res) => { // 获取请求 body 内容 const { username, email, password, verificationCode } = req.body // 注册逻辑 if (username && email && password && verificationCode) { // 注册成功 res.json({ success: true }) } else { // 注册失败 res .status(400) .json({ success: false, error: 'Incomplete registration information' }) } }) app.use((err, req, res, next) => { console.error(err.stack) res.status(500).json({ success: false, error: 'Internal Server Error' }) }) app.listen(port, '127.0.0.1', () => { console.log(`Server is running on http://127.0.0.1:${port}`) })