如何在Node.js应用中实现关注列表和粉丝列表

如何在Node.js应用中实现关注列表和粉丝列表

在社交网络或者任何需要用户交互的应用中,实现关注和被关注的功能是非常常见的需求。本文将通过一个简单的例子,展示如何在Node.js环境下,使用Express框架和Mongoose库来实现用户的关注列表和粉丝列表。

1. 创建路由

首先,我们需要为获取用户的关注列表和粉丝列表创建相应的路由。

获取关注列表

我们创建一个GET路由,通过该路由可以查询某个用户关注了哪些人:

js 复制代码
// 在user.js文件中定义路由
router.get('/getSubscribe/:userId', userController.getSubscribe);

这里的/getSubscribe/:userId路由将接受一个用户ID作为参数,用来查找这个用户关注的所有人。

2. 编写Controller

接下来,我们需要在controller中实现具体的逻辑来处理路由请求。

关注列表的实现

userController中,我们添加getSubscribe方法来处理获取关注列表的逻辑:

js 复制代码
const lodash = require('lodash');
const Subscribe = require('../models/subscribe');

exports.getSubscribe = async (req, res) => {
  let subscribeList = await Subscribe.find({
    user: req.params.userId
  }).populate('channel');
  
  subscribeList = subscribeList.map(item => {
    return lodash.pick(item.channel, [
      '_id', 'username', 'image', 'subscribeCount', 'cover', 'channelDes'
    ]);
  });
  
  res.status(200).json(subscribeList);
};

在这段代码中,我们使用Subscribe.find()来查找所有该用户关注的记录,并使用.populate('channel')来填充关联的用户信息。然后我们使用lodashpick函数从每个关注的用户中挑选出需要的信息返回。

3. Postman测试

在完成路由和控制器的编写后,我们使用Postman进行接口测试,确保我们的功能正常。

4. 实现粉丝列表

粉丝列表的实现逻辑与关注列表类似,但是在查询时我们将关注点放在了被关注者(即当前用户)。

路由定义

js 复制代码
// 在user.js文件中添加路由
router.get('/getChannel', verifyToken(), userController.getChannel);

这里我们使用verifyToken()来确保只有验证过的用户才可以查询他们的粉丝列表。

Controller实现

js 复制代码
exports.getChannel = async (req, res) => {
  let channelList = await Subscribe.find({
    channel: req.user.userinfo._id
  }).populate('user');
  
  channelList = channelList.map(item => {
    return lodash.pick(item.user, [
      '_id', 'username', 'image', 'subscribeCount', 'cover', 'channelDes'
    ]);
  });
  
  res.status(200).json(channelList);
};

5. Postman验证

同样,使用Postman来验证粉丝列表接口的正确性。

通过这两个简单的功能实现,我们可以在Node.js应用中有效地管理用户的社交关系。希望这篇博客能够帮助你在构建类似功能时,有一个清晰的指导!

相关推荐
小蒜学长3 分钟前
足球联赛管理系统(代码+数据库+LW)
java·数据库·spring boot·后端
骑着bug的coder7 分钟前
第10讲:并发场景优化——锁机制与死锁解决
后端·mysql
青梅主码8 分钟前
CB Insights最新发布《人工智能编程代理市场份额报告:2025 年 12 月》:Cursor 被誉为当下最强的 AI 代码编辑器 Claude Code
后端
这是程序猿12 分钟前
基于java的SpringBoot框架医院药品管理系统
java·开发语言·spring boot·后端·spring·医院药品管理系统
天远数科13 分钟前
Node.js全栈开发:深度集成天远贷前风险报告接口打造风控中台
大数据·node.js
武子康18 分钟前
大数据-203 scikit-learn 决策树剪枝参数:max_depth/min_samples_leaf 到 min_impurity_decrease
大数据·后端·机器学习
回家路上绕了弯23 分钟前
Resilience4j全面指南:轻量级熔断限流框架的实战与落地
分布式·后端
SimonKing24 分钟前
你的网站SSL证书又要过期了?这个工具能让你永久告别焦虑
java·后端·程序员
麦兜*28 分钟前
Spring Boot 3.x 升级踩坑大全:Jakarta EE 9+、GraalVM Native 与配置迁移实战
java·spring boot·后端·spring·spring cloud
Moment29 分钟前
一杯茶时间带你基于 Yjs 和 reactflow 构建协同流程图编辑器 😍😍😍
前端·后端·面试