diff --git a/server/index.js b/server/index.js index f3d97dfe..04555f50 100644 --- a/server/index.js +++ b/server/index.js @@ -9,360 +9,22 @@ 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 userRoutes = require('./routes/user') -// 模拟用户数据 -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], - }, -] +// 帖子路由 +const topicRoutes = require('./routes/topic') -// 定义用户JSON数据的路由 -app.get('/kungalgamer/:id', (req, res) => { - const userId = parseInt(req.params.id) - const user = users.find((user) => user.registrationSequence === userId) +// 登录路由 +const loginRoutes = require('./routes/login') - if (!user) { - res.status(404).json({ error: 'User not found' }) - } else { - res.json(user) - } -}) +// 注册路由 +const registerRoutes = require('./routes/register') -// 获取指定帖子的路由 -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('/kungalgamer', userRoutes) +app.use('/topic', topicRoutes) +app.use('/login', loginRoutes) +app.use('/register', registerRoutes) app.use((err, req, res, next) => { console.error(err.stack) diff --git a/server/routes/login.js b/server/routes/login.js new file mode 100644 index 00000000..c96dc14f --- /dev/null +++ b/server/routes/login.js @@ -0,0 +1,21 @@ +// login.js + +const express = require('express') +const router = express.Router() + +// 登录 +router.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' }) + } +}) + +module.exports = router diff --git a/server/routes/register.js b/server/routes/register.js new file mode 100644 index 00000000..6a564691 --- /dev/null +++ b/server/routes/register.js @@ -0,0 +1,23 @@ +// register.js + +const express = require('express') +const router = express.Router() + +// 注册 +router.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' }) + } +}) + +module.exports = router diff --git a/server/routes/topic.js b/server/routes/topic.js new file mode 100644 index 00000000..45153997 --- /dev/null +++ b/server/routes/topic.js @@ -0,0 +1,267 @@ +// topic.js + +const express = require('express') +const router = express.Router() + +// 模拟一个 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, + }, + }, +] + +// 获取指定帖子的路由 +router.get('/: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!' }) + } +}) + +// 获取帖子回复的路由 +router.get('/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!' }) + } +}) + +// 获取评论的路由 +router.get('/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) + } +}) + +module.exports = router diff --git a/server/routes/user.js b/server/routes/user.js new file mode 100644 index 00000000..2d1243b8 --- /dev/null +++ b/server/routes/user.js @@ -0,0 +1,68 @@ +// user.js + +const express = require('express') +const router = express.Router() + +// 模拟用户数据 +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数据的路由 +router.get('/: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) + } +}) + +module.exports = router