个人网站制作 Part 10 添加用户评论功能 | Web开发项目

文章目录

  • 👩‍💻 基础Web开发练手项目系列:个人网站制作
    • 🚀 添加用户评论功能
      • 🔨使用MongoDB
        • 🔧步骤 1: 修改博客模型
        • 🔧步骤 2: 添加评论路由
      • 🔨使用Vue.js
        • 🔧步骤 3: 渲染评论
    • 🚀 预览与保存
    • 🚀 下一步计划

👩‍💻 基础Web开发练手项目系列:个人网站制作

欢迎回到基础Web开发练手项目系列!
在前几篇博文中,我们已经创建了个人网站的基本结构、样式、导航栏、项目展示、联系信息、表单交互、动画效果、页面滚动效果、响应式设计、性能优化、页面动画、用户认证、数据库集成、电子邮件通知、社交媒体集成和博客功能。
在本篇中,我们将学习如何添加用户评论功能,使你的博客更加互动。

在这里插入图片描述

🚀 添加用户评论功能

🔨使用MongoDB

🔧步骤 1: 修改博客模型

server.js 文件中修改博客模型,添加评论字段:

const blogSchema = new mongoose.Schema({title: String,content: String,author: String,date: { type: Date, default: Date.now },comments: [{ body: String, date: { type: Date, default: Date.now } }]
});const Blog = mongoose.model('Blog', blogSchema);
🔧步骤 2: 添加评论路由

server.js 文件中添加评论路由:

// 添加评论
app.post('/blogs/:id/comments', async (req, res) => {const blogId = req.params.id;const { body } = req.body;try {const blog = await Blog.findById(blogId);if (!blog) {return res.status(404).json({ message: '博客未找到' });}// 将评论添加到博客的评论数组中blog.comments.push({ body });const updatedBlog = await blog.save();res.json(updatedBlog);} catch (error) {res.status(500).json({ message: error.message });}
});

🔨使用Vue.js

🔧步骤 3: 渲染评论

index.html 文件中渲染评论:

<div id="app"><h2>博客列表</h2><ul><li v-for="blog in blogs" :key="blog._id">{{ blog.title }} - {{ blog.author }}<ul><li v-for="comment in blog.comments" :key="comment.date">{{ comment.body }}</li></ul><input v-model="newComment" placeholder="添加评论"><button @click="addComment(blog._id)">提交评论</button></li></ul>
</div>

script.js 文件中添加Vue实例中的方法:

const app = new Vue({el: '#app',data: {blogs: [],newComment: ''},mounted() {// 获取博客数据this.fetchBlogs();},methods: {fetchBlogs() {fetch('/blogs').then(response => response.json()).then(data => this.blogs = data).catch(error => console.error('获取博客数据失败:', error));},addComment(blogId) {fetch(`/blogs/${blogId}/comments`, {method: 'POST',headers: {'Content-Type': 'application/json'},body: JSON.stringify({ body: this.newComment })}).then(response => response.json()).then(data => {// 更新本地博客数据const blogIndex = this.blogs.findIndex(blog => blog._id === blogId);this.blogs[blogIndex] = data;// 清空评论输入框this.newComment = '';}).catch(error => console.error('添加评论失败:', error));}}
});

🚀 预览与保存

确保保存所有文件并在浏览器中预览你的网站。你现在应该看到一个拥有用户评论功能的更加互动的个人网站了!

🚀 下一步计划

在下一篇文章中,我们将学习如何添加用户权限管理,使你的网站更加安全。记得继续关注本系列,为你的网站增添更多强大的功能!

通过这个项目,你已经学到了Web开发中许多重要的基础知识,并通过添加用户评论功能使你的博客更加生动。祝你编码愉快,不断创新!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/544863.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

由浅到深认识C语言(11):结构体

该文章Github地址&#xff1a;https://github.com/AntonyCheng/c-notes 在此介绍一下作者开源的SpringBoot项目初始化模板&#xff08;Github仓库地址&#xff1a;https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址&#xff1a;https://blog.csdn…

前端React篇之React的生命周期有哪些?

目录 React的生命周期有哪些&#xff1f;挂载阶段&#xff08;Mounting&#xff09;更新阶段&#xff08;Updating&#xff09;卸载阶段&#xff08;Unmounting&#xff09;错误处理阶段&#xff08;Error Handling&#xff09; React常见的生命周期React主要生命周期 React的生…

神经网络中激活函数的绘制——阶跃函数、sigmoid函数、ReLU函数

一、阶跃函数 import numpy as np import matplotlib.pylab as plt def step_function(x):return np.array(x>0)x np.arange(-5.0,5.0,0.1) y step_function(x) plt.plot(x, y) plt.ylim(-0.1, 1.1) plt.show() 二、sigmoid函数 import numpy as np import matplotlib.p…

如果要做优化,CSS提高性能的方法有哪些?

文章目录 一、前言二、实现方式内联首屏关键CSS异步加载CSS资源压缩合理使用选择器减少使用昂贵的属性不要使用import其他 三、总结参考文献 一、前言 每一个网页都离不开css&#xff0c;但是很多人又认为&#xff0c;css主要是用来完成页面布局的&#xff0c;像一些细节或者优…

智慧公厕对于智慧城市管理的意义

近年来&#xff0c;智慧城市的概念不断被提及&#xff0c;而智慧公厕作为智慧城市管理的重要组成部分&#xff0c;其在监测、管理和养护方面发挥着重要的作用。智慧公厕不仅是城市市容提升的重要保障&#xff0c;还能提升城市环境卫生管理的质量&#xff0c;并有效助力创造清洁…

【代码随想录】【回溯算法】补day24:组合问题以及组合的优化

回溯算法&#xff1a;递归函数里面嵌套着for循环 给定两个整数 n 和 k&#xff0c;返回 1 … n 中所有可能的 k 个数的组合。 示例: 输入: n 4, k 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 包含组合问题和组合问题的剪枝优化 class solution:def combine(se…

离线LaTex公式识别工具V0.9开发

离线LaTex公式识别工具V0.9开发 文章目录 离线LaTex公式识别工具V0.9开发工程来源GUI界面streamlit 模型文件离线调用Pix2TexttexifyNougat-LaTex 打包成exepyinstaller打包方法pyinstaller打包遇到的问题File "subprocess.py", line 1420, in _execute_child FileNo…

数据结构的概念大合集03(栈)

概念大合集03 1、栈1.1 栈的定义和特点1.2 栈的基础操作1.3 栈的顺序存储1.3.1 顺序栈1.3.2 栈空&#xff0c;栈满&#xff0c;进栈&#xff0c;出栈的基本思想1.3.3 共享栈1.3.3.1 共享栈的4要素 1.4 栈的链式存储1.4.1 链栈的实现1.4.2 链栈的4个要素 1、栈 1.1 栈的定义和特…

软考高级:软件工程螺旋模型概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

科研绘图一:箱线图(添加贝赛尔曲线)

R语言绘图系列—箱线图贝赛尔曲线 &#xff08;一&#xff09;: 科研绘图一&#xff1a;箱线图&#xff08;添加贝赛尔曲线&#xff09; 文章目录 R语言绘图系列---箱线图贝赛尔曲线&#xff08;一&#xff09;: 科研绘图一&#xff1a;箱线图&#xff08;添加贝赛尔曲线&…

【人工智能】英文学习材料(每日一句)

#学习笔记# 目录 1.Natural Language Processing&#xff0c;NLP&#xff08;自然语言处理&#xff09; 2.Machine Learing&#xff0c;ML&#xff08;机器学习&#xff09; 3.Neural Networks&#xff08;神经网络&#xff09; 4.Deep Learing&#xff08;深度学习&#…

GiT: Towards Generalist Vision Transformer through Universal Language Interface

GiT: Towards Generalist Vision Transformer through Universal Language Interface 相关链接&#xff1a;arxiv github 关键字&#xff1a;Generalist Vision Transformer (GiT)、Universal Language Interface、Multi-task Learning、Zero-shot Transfer、Transformer 摘要 …