rebuild server

This commit is contained in:
KUN1007 2023-06-02 22:24:57 +08:00
parent 9aaff3c99e
commit 9bf6a1c508
5 changed files with 391 additions and 350 deletions

View file

@ -9,360 +9,22 @@ app.use(bodyParser.json())
const port = 10007 // 端口号
// 模拟一个 topics 数组
const topics = [
// 帖子的数组
{
topicId: 1,
topicTitle: '啊这可海星啊这可海星啊这可海星啊这可海星啊这可海星',
topicFloorCount: 1,
topicContent: '<h1>啊这可海星</h1>',
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: '<h1>啊这可海星</h1>',
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)

21
server/routes/login.js Normal file
View file

@ -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

23
server/routes/register.js Normal file
View file

@ -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

267
server/routes/topic.js Normal file
View file

@ -0,0 +1,267 @@
// topic.js
const express = require('express')
const router = express.Router()
// 模拟一个 topics 数组
const topics = [
// 帖子的数组
{
topicId: 1,
topicTitle: '啊这可海星啊这可海星啊这可海星啊这可海星啊这可海星',
topicFloorCount: 1,
topicContent: '<h1>啊这可海星</h1>',
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: '<h1>啊这可海星</h1>',
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

68
server/routes/user.js Normal file
View file

@ -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