实现视频交互系统中的“喜欢的视频列表”和“视频详情”功能

在构建视频交互系统时,添加"喜欢的视频列表"和"视频详情"功能能极大提升用户体验。本文将详细介绍如何在Node.js环境中使用Express框架和Mongoose来实现这两个功能。

喜欢的视频列表展示

实现喜欢的视频列表功能主要涉及到路由的设置、控制器的编写以及对数据库的查询操作。

1. 新建路由

首先,我们需要在Express的路由文件中定义一个新的路由,用于获取"喜欢的视频列表"。

js 复制代码
router
  .get('/likeList', verifyToken(), videoController.likeList)

这里的verifyToken()是一个中间件,用于验证用户的登录状态。

2. 编写Controller

在控制器文件中,我们添加likeList函数来处理视频列表的获取逻辑。

js 复制代码
exports.likeList = async (req, res) => {
  const { pageNum = 1, pageSize = 10 } = req.body;
  let likes = await VideoLike.find({
    like: 1,
    user: req.user.userinfo._id
  }).skip((pageNum - 1) * pageSize)
    .limit(pageSize)
    .populate('video', "_id title vodVideoId user");

  let likeCount = await VideoLike.countDocuments({
    like: 1,
    user: req.user.userinfo._id
  });
  res.status(200).json({ likes, likeCount });
}

这段代码主要实现了分页查询和关联查询的功能,通过Mongoose的populate方法关联查询了视频的详细信息。

3. Postman测试

使用Postman对新建的接口进行测试,确保其返回正确的数据格式和内容。

补全视频详情逻辑

接下来,我们需要完善视频详情页的功能,包括喜欢、不喜欢和订阅的状态显示。

1. 补全视频详情逻辑

在视频详情的控制器中,我们补全了之前缺失的逻辑。

js 复制代码
javascriptCopy code
exports.video = async (req, res) => {
  const { videoId } = req.params;
  let videoInfo = await Video
    .findById(videoId)
    .populate('user', '_id username cover');

  videoInfo = videoInfo.toJSON();
  videoInfo.isLike = false;
  videoInfo.isDislike = false;
  videoInfo.isSubscribe = false;

  if (req.user.userinfo) {
    const userId = req.user.userinfo._id;
    if (await VideoLike.findOne({ user: userId, video: videoId, like: 1 })) {
      videoInfo.isLike = true;
    }
    if (await VideoLike.findOne({ user: userId, video: videoId, like: -1 })) {
      videoInfo.isDislike = true;
    }
    if (await Subscribe.findOne({ user: userId, channel: videoInfo.user._id })) {
      videoInfo.isSubscribe = true;
    }
  }

  res.status(200).json(videoInfo);
}

2. Postman验证

再次使用Postman来验证补全后的视频详情接口,确保各状态正确反映。

总结

通过本文的指导,你可以在自己的视频交互系统中实现类似的"喜欢的视频列表"和"视频详情"功能。这些功能不仅提升了用户体验,还增加了应用的交互性。

相关推荐
一点技术6 小时前
基于SpringBoot的选课调查系统
java·spring boot·后端·选课调查系统
RANCE_atttackkk7 小时前
Springboot+langchain4j的RAG检索增强生成
java·开发语言·spring boot·后端·spring·ai·ai编程
好好研究8 小时前
Spring Boot - Thymeleaf模板引擎
java·spring boot·后端·thymeleaf
爬山算法8 小时前
Hibernate(76)如何在混合持久化环境中使用Hibernate?
java·后端·hibernate
她说..8 小时前
策略模式+工厂模式实现单接口适配多审核节点
java·spring boot·后端·spring·简单工厂模式·策略模式
csdn_aspnet8 小时前
ASP.NET 8 - Cookie 身份验证
后端·asp.net·cookie·.net8
笔画人生9 小时前
Cursor + 蓝耘API:用自然语言完成全栈项目开发
前端·后端
有来技术10 小时前
ASP.NET Core 权限管理系统(RBAC)设计与实现|vue3-element-admin .NET 后端
vue.js·后端·c#·asp.net·.net
qq_124987075310 小时前
基于springboot的林业资源管理系统设计与实现(源码+论文+部署+安装)
java·vue.js·spring boot·后端·spring·毕业设计·计算机毕业设计
shuair10 小时前
springboot整合redisson单机模式
java·spring boot·后端