如何实现跟随系统,返回关注者列表和关注用户

时间:2017-10-19 11:47:15

标签: node.js mongodb express

在我的应用程序中,我需要实现4个功能:

  1. 用户可以关注其他用户。
  2. 用户可以取消关注其他用户。
  3. 用户可以看到所有关注者的列表。
  4. 用户可以看到他们所关注的所有人的列表。
  5. 我相信我已正确实施1.和2.我在follow.model中创建了一个跟随模式,我在下面创建了follow.controller两种方法,用于存储(跟随)和销毁(取消关注)。

    现在我想实现3.和4.我在user.model模式中创建了两个数组,一个用于跟随,一个用于跟随者。当我在user.controller中返回用户时,如何填充以下和关注者数组?目前他们是空的。

    follow.model.js

    var mongoose = require('mongoose'),
    Schema   = mongoose.Schema;
    
    var FollowSchema = new Schema({
    
        follower: {
            type: Schema.Types.ObjectId,
            ref: 'User'
        },
        followee: {
            type: Schema.Types.ObjectId,
            ref: 'User'
        }
    },
    {
        timestamps: {createdAt: 'created_at', updatedAt: 'updated_at'}
    });
    
    module.exports = mongoose.model('Follow', FollowSchema);
    

    follow.controller.js

    'use strict';
    
    const User = require('../models/user.model');
    const Follow = require('../models/follow.model');
    
    
    class FollowController {
    
        constructor() {
    
        }
    
    
        store(req, res) {
    
            let follower = req.body.follower;
            let followee = req.params.id;
    
            let follow = new Follow({
                follower: follower,
                followee: followee,
            });
    
            follow.save(function (err) {
    
                if (err) {
                    return res.status(404).json({
                        succes: false,
                        status: 404,
                        data: {},
                        message: "There was an error trying follow the user."
                    });
                }
    
                return res.status(200).json({
    
                    success: true,
                    status: 200,
                    data: follow,
                    message: 'Successfully followed user'
    
                });
            });
        }
        destroy(req, res) {
    
            let follower = req.params.followerid;
            let followee = req.params.id;
    
            Follow.remove({ 'follower': follower, 'followee': followee }, (err, result) => {
    
                if (err) {
                    return res.status(404).json({
                        success: false,
                        status: 404,
                        data: {},
                        message: "Error removing record"
                    });
                }
    
    
                return res.status(201).json({
                    success: true,
                    status: 201,
                    data: {},
                    message: "Successfully unfollowed user"
                })
    
            });
        }
    
    }
    
    module.exports = FollowController;
    

    user.model.js

    let UserSchema = new Schema({
    
            email: {
                address: {
                    type: String,
                    lowercase: true,
                    //unique: true,
    
                },
                token: String,
                verified: {
                    type: Boolean,
                    default: false,
                },
            },
            password: {
                type: String,
            },
    
            following: [{
                type: Schema.Types.ObjectId, ref: 'Follow'
            }],
            followers: [{
                type: Schema.Types.ObjectId, ref: 'Follow'
            }],
    
    
        {
            timestamps: {createdAt: 'created_at', updatedAt: 'updated_at'}
        });
    

    user.controller.js

      show(req, res) {
    
            let id = req.params.id;
    
              User.findOne({ '_id': id },
             function (err, user) {
    
                if (err) {
                    return res.json(err);
                }
    
                return res.json(user);
    
            });
        }
    

1 个答案:

答案 0 :(得分:0)

您只需要populate这些字段:

User.findOne({ '_id': id }, (err, user) => {
  if (err) return res.json(err);
  return res.json(user);
}).populate([
  { path: 'following' },
  { path: 'followers' }
]);