在构建视频交互系统时,添加"喜欢的视频列表"和"视频详情"功能能极大提升用户体验。本文将详细介绍如何在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来验证补全后的视频详情接口,确保各状态正确反映。
总结
通过本文的指导,你可以在自己的视频交互系统中实现类似的"喜欢的视频列表"和"视频详情"功能。这些功能不仅提升了用户体验,还增加了应用的交互性。