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

在构建视频交互系统时,添加"喜欢的视频列表"和"视频详情"功能能极大提升用户体验。本文将详细介绍如何在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来验证补全后的视频详情接口,确保各状态正确反映。

总结

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

相关推荐
小码哥_常2 小时前
解锁AI编程密码:程序员常用的10个AI提示词
后端
我叫汪枫3 小时前
在后台管理系统中,如何递归和选择保留的思路来过滤菜单
开发语言·javascript·node.js·ecmascript
技术钱3 小时前
nodejs使用RustFS容器服务搭建对象存储oss
node.js·egg
直奔標竿3 小时前
Java开发者AI转型第二十七课!Spring AI 个人知识库实战(六)——全栈闭环收官,解锁前端流式渲染终极技巧
java·开发语言·前端·人工智能·后端·spring
金銀銅鐵3 小时前
[java] 编译之后的记录类(Record Classes)长什么样子(上)
java·jvm·后端
uzong5 小时前
我研读了 500 个 Spring Boot 生产级代码库,90% 都犯了这 7 个致命错误
后端
xiaobaoyu5 小时前
ssm知识点梳理
后端
IT_陈寒6 小时前
Vite的public文件夹放静态资源?这坑我替你踩了
前端·人工智能·后端
浮游本尊6 小时前
合同同步逻辑
后端
子兮曰6 小时前
别让爬虫白嫖你的导航站了:纯免费,手把手实现加密字体防爬
前端·javascript·后端