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

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

总结

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

相关推荐
摸鱼的春哥11 分钟前
实战:在 Docker (Windows) 中构建集成 yt-dlp 的“满血版” n8n 自动化工作流
前端·javascript·后端
IT 行者14 分钟前
Spring Security 7 OAuth2 Token 格式选择浅析
java·后端·spring
幽络源小助理16 分钟前
Springboot机场乘客服务系统源码 – SpringBoot+Vue项目免费下载 | 幽络源
vue.js·spring boot·后端
源代码•宸28 分钟前
Golang基础语法(go语言error、go语言defer、go语言异常捕获、依赖管理、Go Modules命令)
开发语言·数据库·后端·算法·golang·defer·recover
SnrtIevg39 分钟前
Vavr 用户指南
java·后端
PieroPC39 分钟前
用FastAPI 一个 后端 和 两个前端 原生HTML/CSS/JS 、Vue3 写一个博客系统 例
前端·后端
Way2top40 分钟前
Go语言动手写Web框架 - Gee第五天 中间件
后端·go
Way2top44 分钟前
Go语言动手写Web框架 - Gee第四天 分组控制
后端·go
喵叔哟44 分钟前
17.核心服务实现(上)
后端·.net
Benny的老巢1 小时前
【n8n工作流入门02】macOS安装n8n保姆级教程:Homebrew与npm两种方式详解
macos·npm·node.js·n8n·n8n工作流·homwbrew·n8n安装