Commit 4a351917 authored by happystarkitty's avatar happystarkitty
Browse files

update

parent 45316686
No preview for this file type
...@@ -2,7 +2,7 @@ package db ...@@ -2,7 +2,7 @@ package db
import ( import (
"database/sql" "database/sql"
//"fmt" "fmt"
//"log" //"log"
//"os" //"os"
...@@ -11,16 +11,18 @@ import ( ...@@ -11,16 +11,18 @@ import (
var db *sql.DB var db *sql.DB
func InitDB() { func InitDB() error {
var err error var err error
connStr := "longyue:longyue0511@tcp(127.0.0.1:3306)/Comments" connStr := "longyue:longyue0511@tcp(127.0.0.1:3306)/Comments"
db, err = sql.Open("mysql", connStr) db, err = sql.Open("mysql", connStr)
if err != nil { if err != nil {
panic(err) return fmt.Errorf("failed to open database connection: %v", err)
} }
err = db.Ping() err = db.Ping()
if err != nil { if err != nil {
panic(err) return fmt.Errorf("failed to ping database: %v", err)
} }
return nil
} }
...@@ -13,10 +13,11 @@ type Comment struct { ...@@ -13,10 +13,11 @@ type Comment struct {
Content string `json:"content"` Content string `json:"content"`
} }
func GetComment(offset, size int) ([]Comment, error) { func GetComment(page, size int) ([]Comment, int, error) {
offset := (page - 1) * size
rows, err := db.Query("SELECT id,name,content FROM comments LIMIT ? OFFSET ?", size, offset) rows, err := db.Query("SELECT id,name,content FROM comments LIMIT ? OFFSET ?", size, offset)
if err != nil { if err != nil {
return nil, err return nil, 0, err
} }
defer rows.Close() defer rows.Close()
...@@ -24,23 +25,33 @@ func GetComment(offset, size int) ([]Comment, error) { ...@@ -24,23 +25,33 @@ func GetComment(offset, size int) ([]Comment, error) {
for rows.Next() { for rows.Next() {
var comment Comment var comment Comment
if err := rows.Scan(&comment.ID, &comment.Name, &comment.Content); err != nil { if err := rows.Scan(&comment.ID, &comment.Name, &comment.Content); err != nil {
return nil, err return nil, 0, err
} }
comments = append(comments, comment) comments = append(comments, comment)
} }
if err := rows.Err(); err != nil { if err := rows.Err(); err != nil {
return nil, err return nil, 0, err
}
total, err := GetTotalComments()
if err != nil {
return nil, 0, err
} }
return comments, nil
return comments, total, nil
} }
func AddComment(name string, content string) (int, error) { func AddComment(name string, content string) (int, error) {
var id int result, err := db.Exec("INSERT INTO comments (name,content) VALUES (?,?)", name, content)
err := db.QueryRow("INSERT INTO comments (name,content) VALUES(?,?) RETURNING id", name, content).Scan(&id) if err != nil {
return 0, err
}
id, err := result.LastInsertId()
if err != nil { if err != nil {
return 0, err return 0, err
} }
return id, nil return int(id), nil
} }
func DeleteComment(commentID int) error { func DeleteComment(commentID int) error {
...@@ -54,5 +65,5 @@ func GetTotalComments() (int, error) { ...@@ -54,5 +65,5 @@ func GetTotalComments() (int, error) {
if err != nil { if err != nil {
return 0, err return 0, err
} }
return total, err return total, nil
} }
...@@ -9,7 +9,9 @@ import ( ...@@ -9,7 +9,9 @@ import (
) )
func main() { func main() {
db.InitDB() if err := db.InitDB(); err != nil {
log.Fatalf("Failed to initialize database: %v", err)
}
mux := http.NewServeMux() mux := http.NewServeMux()
...@@ -17,10 +19,15 @@ func main() { ...@@ -17,10 +19,15 @@ func main() {
mux.HandleFunc("/comment/add", server.AddComment) mux.HandleFunc("/comment/add", server.AddComment)
mux.HandleFunc("/comment/delete", server.DeleteComment) mux.HandleFunc("/comment/delete", server.DeleteComment)
handler := cors.Default().Handler(mux) corsHandler := cors.New(cors.Options{
AllowedOrigins: []string{"*"},
AllowedMethods: []string{"GET", "POST", "DELETE", "OPTIONS"},
AllowedHeaders: []string{"Content-Type"},
AllowCredentials: true,
}).Handler(mux)
log.Println("Starting server on :8080") log.Println("Starting server on :8080")
if err := http.ListenAndServe(":8080", handler); err != nil { if err := http.ListenAndServe(":8080", corsHandler); err != nil {
log.Fatalf("Server failed to start: %v", err) log.Fatalf("Server failed to start: %v", err)
} }
} }
...@@ -50,35 +50,20 @@ func GetComment(w http.ResponseWriter, r *http.Request) { ...@@ -50,35 +50,20 @@ func GetComment(w http.ResponseWriter, r *http.Request) {
size = 10 size = 10
} }
dbComments, err := db.GetComment(page, size) dbComments, total, err := db.GetComment(page, size)
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return return
} }
start := (page - 1) * size response := GetCommentResponse{
end := start + size Code: 0,
if start > len(dbComments) { Msg: "success",
start = len(dbComments) Data: GetData{
Total: total,
Comments: dbComments,
},
} }
if end > len(dbComments) {
end = len(dbComments)
}
pagedComments := dbComments[start:end]
comments := make([]db.Comment, len(pagedComments))
for i, c := range pagedComments {
comments[i] = db.Comment{
ID: c.ID,
Name: c.Name,
Content: c.Content,
}
}
var response GetCommentResponse
response.Code = 0
response.Msg = "success"
response.Data.Total = len(dbComments)
response.Data.Comments = comments
w.Header().Set("Content-Type", "application/json;charset=utf-8") w.Header().Set("Content-Type", "application/json;charset=utf-8")
json.NewEncoder(w).Encode(response) json.NewEncoder(w).Encode(response)
......
...@@ -3,13 +3,11 @@ const commentSection = document.querySelector("#commentSection"); ...@@ -3,13 +3,11 @@ const commentSection = document.querySelector("#commentSection");
const submitButton = document.querySelector("#submitButton"); const submitButton = document.querySelector("#submitButton");
const userNameInput = document.querySelector("#userName"); const userNameInput = document.querySelector("#userName");
const commentContentInput = document.querySelector("#commentContent"); const commentContentInput = document.querySelector("#commentContent");
const deleteButton = document.querySelectorAll(".deleteButton");
const previousPageButton=document.querySelector("#previousPage") const previousPageButton=document.querySelector("#previousPage")
const nextPageButton=document.querySelector("#nextPage") const nextPageButton=document.querySelector("#nextPage")
let currentPage=1; let currentPage=1;
const pageSize=10; const pageSize=10;
let commentNumber = 0;
function resetInput() { function resetInput() {
userNameInput.value = ""; userNameInput.value = "";
...@@ -19,7 +17,6 @@ function resetInput() { ...@@ -19,7 +17,6 @@ function resetInput() {
function deleteComment(event){ function deleteComment(event){
const comment = event.target.parentElement; const comment = event.target.parentElement;
const commentId=comment.getAttribute("data-id"); const commentId=comment.getAttribute("data-id");
html.removeChild(comment);
fetch(`http://localhost:8080/comment/delete?id=${commentId}`,{ fetch(`http://localhost:8080/comment/delete?id=${commentId}`,{
method:'DELETE', method:'DELETE',
headers:{ headers:{
...@@ -30,19 +27,19 @@ function deleteComment(event){ ...@@ -30,19 +27,19 @@ function deleteComment(event){
.then(data=>{ .then(data=>{
if (data.code===0){ if (data.code===0){
console.log("Comment deleted successfully"); console.log("Comment deleted successfully");
getComment(currentPage,pageSize);
}else{ }else{
console.error("Failed to delete comment",data.msg); console.error("Failed to delete comment",data.msg);
} }
} })
)
.catch(error=>{ .catch(error=>{
console.error("Error:",error); console.error("Error:",error);
});} });
}
function addComment() { function addComment() {
const userName = userNameInput.value; const userName = userNameInput.value;
const commentContent = commentContentInput.value; const commentContent = commentContentInput.value;
commentNumber = commentNumber + 1;
fetch('http://localhost:8080/comment/add',{ fetch('http://localhost:8080/comment/add',{
method:'POST', method:'POST',
...@@ -78,8 +75,8 @@ function getComment(page,size){ ...@@ -78,8 +75,8 @@ function getComment(page,size){
.then(data=>{ .then(data=>{
if (data.code===0){ if (data.code===0){
console.log("Comments fetched successfully"); console.log("Comments fetched successfully");
renderComments(data.data); renderComments(data.data.comments);
updatePaginationButtons(data.total); updatePaginationButtons(data.data.total);
}else{ }else{
console.error("Error fetching comments:",data.msg); console.error("Error fetching comments:",data.msg);
} }
...@@ -93,41 +90,28 @@ function renderComments(comments){ ...@@ -93,41 +90,28 @@ function renderComments(comments){
comments.forEach(comment =>{ comments.forEach(comment =>{
const commentDiv=document.createElement("div"); const commentDiv=document.createElement("div");
commentDiv.className="comment_box"; commentDiv.className="comment_box";
commentDiv.setAttribute("data-id",comment.id);
const commentatorName=document.createElement("h3"); const commentatorName=document.createElement("h3");
commentatorName.textContent=comment.name; commentatorName.textContent=comment.name;
const commentatorContent=document.createElement("p"); const commentatorContent=document.createElement("p");
commentatorContent.textContent=comment.content; commentatorContent.textContent=comment.content;
const deleteButton=document.createElement("button"); const deleteButton=document.createElement("button");
deleteButton.textContent="删除"; deleteButton.textContent="删除";
deleteButton.className="delete_button";
const shiftRow=document.createElement("br");
deleteButton.addEventListener("click",deleteComment); deleteButton.addEventListener("click",deleteComment);
commentDiv.appendChild(commentatorName); commentDiv.appendChild(commentatorName);
commentDiv.appendChild(commentatorContent); commentDiv.appendChild(commentatorContent);
commentDiv.appendChild(deleteButton); commentDiv.appendChild(deleteButton);
commentSection.appendChild(commentDiv); commentSection.appendChild(commentDiv);
commentSection.appendChild(shiftRow);
});} });}
else { else {
console.error("Comments data is not an array"); console.error("Comments data is not an array");
} }
} }
function deleteComment(commentID){
fetch('http://localhost:8080/comment/delete?id=${commentID}',{
method:'DELETE'
})
.then(response=>response.json())
.then(data=>{
if(data.code===0){
console.log("Comment deleted successfully");
getComment(currentPage,pageSize);
}else{
console.error("Error deleting comment:",data.msg);
}
})
.catch(error=>console.error("Error:".error));
}
function updatePaginationButtons(totalComments){ function updatePaginationButtons(totalComments){
const totalPages=Math.ceil(totalComments/pageSize); const totalPages=Math.ceil(totalComments/pageSize);
previousPageButton.disabled=currentPage<=1; previousPageButton.disabled=currentPage<=1;
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment