实现Node.js应用中的视频评论列表展示与删除功能

实现Node.js应用中的视频评论列表展示与删除功能

在现代Web应用中,视频内容和互动功能(如评论)的结合极大地增加了用户的参与度。本文将通过一个具体的例子,展示如何在Node.js环境中使用Express框架来实现视频评论的列表展示和删除功能。

1. 创建API路由

首先,我们需要设置相应的路由以处理前端的请求。以下是如何设置获取视频评论列表和删除特定评论的路由:

js 复制代码
// router/video.js
router
  .get('/commentList/:videoId', videoController.commentList)
  .delete('/comment/:videoId/:commentId', verifyToken(), videoController.deleteComment);

这里,我们创建了两个路由:一个用于获取特定视频的评论列表,另一个用于删除评论。注意,删除评论路由使用了verifyToken()中间件来确保操作的安全性。

2. 添加Controller逻辑

接下来,我们在videoController.js中定义具体的业务逻辑。

  • 获取评论列表:
js 复制代码
// videoController.js
exports.commentList = async (req, res) => {
  const videoId = req.params.videoId;
  const { pageNum = 1, pageSize = 10 } = req.body;
  const comments = await VideoComment
    .find({ video: videoId })
    .skip((pageNum - 1) * pageSize)
    .limit(pageSize)
    .populate('user', '_id username image');
  const commentCount = await VideoComment.countDocuments({ video: videoId });
  res.status(200).json({ comments, commentCount });
};

此函数首先从请求中获取videoId,以及用于分页的pageNumpageSize。通过populate方法,我们还能获取发表评论用户的部分信息,如用户名和头像。

  • 删除评论:
js 复制代码
// videoController.js
exports.deleteComment = async (req, res) => {
  const { videoId, commentId } = req.params;
  const videoInfo = await Video.findById(videoId);
  if (!videoInfo) {
    return res.status(404).json({ err: "视频不存在" });
  }
  const comment = await VideoComment.findById(commentId);
  if (!comment) {
    return res.status(404).json({ err: "评论不存在" });
  }
  if (!comment.user.equals(req.user.userinfo._id)) {
    return res.status(403).json({ err: "无权限删除" });
  }
  await comment.deleteOne();
  videoInfo.commentCount--;
  await videoInfo.save();
  res.status(200).json({ err: "删除成功" });
};

在删除评论的逻辑中,我们首先验证了视频和评论是否存在,并确认当前用户是否有权删除该评论。随后,执行删除操作并更新视频的评论计数。

3. 测试功能

为了确保我们的API正常工作,我们可以使用Postman进行测试。首先测试获取评论列表功能,然后测试删除评论功能。通过这种方式,我们可以确保我们的接口在前端集成之前就已经是功能完备的。

结论

通过Node.js和Express框架,我们能够有效地实现评论功能的添加和管理。这不仅提升了用户的互动体验,也为开发者提供了高效管理内容的工具。在实际部署时,还应考虑添加更多的安全和错误处理功能,以确保应用的稳定和安全。

相关推荐
Marktowin1 小时前
玩转 ZooKeeper
后端
蓝眸少年CY1 小时前
(第十二篇)spring cloud之Stream消息驱动
后端·spring·spring cloud
码界奇点1 小时前
基于SpringBoot+Vue的前后端分离外卖点单系统设计与实现
vue.js·spring boot·后端·spring·毕业设计·源代码管理
lindd9119112 小时前
4G模块应用,内网穿透,前端网页的制作第七讲(智能头盔数据上传至网页端)
前端·后端·零基础·rt-thread·实时操作系统·项目复刻
Loo国昌3 小时前
【LangChain1.0】第八阶段:文档处理工程(LangChain篇)
人工智能·后端·算法·语言模型·架构·langchain
vx_bisheyuange3 小时前
基于SpringBoot的海鲜市场系统
java·spring boot·后端·毕业设计
李慕婉学姐3 小时前
【开题答辩过程】以《基于Spring Boot和大数据的医院挂号系统的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
大数据·spring boot·后端
源代码•宸4 小时前
Leetcode—3. 无重复字符的最长子串【中等】
经验分享·后端·算法·leetcode·面试·golang·string
0和1的舞者5 小时前
基于Spring的论坛系统-前置知识
java·后端·spring·系统·开发·知识
invicinble5 小时前
对于springboot
java·spring boot·后端