// 定义帖子列表的URL
const postUrl="http://123.249.84.124:8899/posts";
// 定义用户列表的URL
const userUrl="http://123.249.84.124:8899/users";
/**
* 生成指定帖子的HTML代码(用于展示顶部特色帖子)
* @param {Object} post - 单个帖子对象,包含帖子的详细信息
* @returns {string} 返回顶部帖子的HTML字符串
*/
function getTopPostHtml(post){
// 使用模板字符串拼接HTML结构,并插入帖子数据
return `
${post.createDate}
${post.title}
${post.body}
`;
}
/**
* 生成指定帖子的HTML代码(用于展示普通帖子列表)
* @param {Object} post - 单个帖子对象,包含帖子的详细信息
* @returns {string} 返回普通帖子的HTML字符串
*/
function getPostHtml(post){
// 使用模板字符串拼接HTML结构,并插入帖子数据
return `
${post.title}
${post.body}
${post.createDate}
`;
}
// 异步函数,用于展示帖子列表
async function showPosts(){
// 从服务器获取帖子数据
let posts = await fetch(postUrl).then(response=>response.json());
let postsHtml="";
// 随机挑选一个帖子作为顶部特色帖子
const randomId = Math.floor(Math.random() * posts.length);
for(let post of posts){
if(post.id == randomId){
// 将随机挑选的帖子以顶部特色帖子的形式展示
document.getElementById("top-post").innerHTML= getTopPostHtml(post);
continue;
}
if(post.body.length>300){
// 如果帖子内容过长,只显示前300个字符加省略号
post.body=post.body.substring(0,300)+"...";
}
postsHtml+=getPostHtml(post);
}
// 将所有普通帖子添加到页面上
document.getElementById("posts").innerHTML= postsHtml;
// 从服务器获取用户数据,并更新帖子的用户信息
let users = await fetch(userUrl).then(response=>response.json());
for(let user of users){
let usernameElements = document.getElementsByClassName("u_"+user.id);
for(let element of usernameElements){
element.innerText = user.name;
}
}
}
// 异步函数,用于创建新帖子
async function createPost(){
// 收集表单数据并发送到服务器
let post = await fetch(postUrl,{
method:"POST",
headers:{
"Content-Type":"application/json"
},
body:JSON.stringify({
title: document.getElementById("title").value,
body: document.getElementById("body").value,
thumbnail: document.getElementById("thumbnail").value,
coverImage: document.getElementById("cover").value,
userId: document.getElementById("userId").value,
createDate: new Date().toLocaleString()
})
}).then(response=>response.json());
// 在页面上添加新帖子
let firstPostDiv = document.getElementById("posts").firstChild;
let newPostDiv = document.createElement("div");
newPostDiv.innerHTML=getPostHtml(post);
document.getElementById("posts").insertBefore(newPostDiv,firstPostDiv);
// 更新新帖子的用户信息
let user = await fetch(userUrl+"/"+post.userId).then(response=>response.json());
document.querySelectorAll(".u_"+post.userId).forEach(e=>e.innerText=user.name);
}
// 当窗口加载完成时执行以下函数
window.onload = function(){
// 展示帖子列表
showPosts();
// 监听提交按钮点击事件,以便添加新帖子
document.getElementById("submit").addEventListener("click",createPost);
};