OXp1845
OXp1845

Reputation: 493

Trying to add followers in Mongoose subarray

I'm learning node.js and I'm trying to figure out how to add users to a subarray in my schema. I'm basically doing a twitter-clone in order to learn how node works.

This is my UserSchema. I want to add users into the "following" field-array.

#Usermodel.js

var UserSchema = mongoose.Schema({
    username: {
        type: String,
        index:true
    },
    password: {
        type: String
    },
    email: {
        type: String
    },
    name: {
        type: String
    },
    facebook : {
        id           : String,
        token        : String
    },
    resetPasswordToken: {type: String},
    resetPasswordExpires: {type: Date},
    following: [{type: mongoose.Schema.Types.ObjectId, ref: 'User'}], <-- I want to add users here
    posts : [{ type: mongoose.Schema.Types.ObjectId, ref: 'Post' }]
});
UserSchema.index({username: 'text'});

var User = module.exports = mongoose.model('User', UserSchema);

Further down in this file you will find my schema method for adding users into the "following" subarray:

#Usermodel.js

module.exports.addFollowers = function (req, res, next){
    User.findOneAndUpdate({_id: req.user._id}, {$push: {following: req.body.id}})
};

I'm querying a route in order to call my schema function. It looks like this:

#routes.js

router.get('/follow', User.addFollowers);

In my ejs front-end, I try to call my schema function by sending a GET-request to my route:

#index.ejs

<ul>
    <%results.forEach(function(element){%> <-- Here I'm looping over users
        <% if(user.id != element.id) { %> <-- Not show if it is myself
            <li>
                <%=element.username%></a> <br>
                <form action="/follow" method="GET"> <-- Call route form
                  <input type="hidden" name="id" value=<%=element._id%>>
                  <button type="submit">Follow</button> <-- Submit GET
                </form>
            </li>
        <% } %>
        <br>
     <%});%>
</ul>

Not sure what to do from here. When I press the "Follow" button my site keeps loading. Couldn't find any posts here on stackoverflow that could help me more at this stage.

Anyone who knows what is wrong? Is this the right way to do it?

Upvotes: 0

Views: 376

Answers (1)

Amulya Kashyap
Amulya Kashyap

Reputation: 2373

Make some changes in #Usermodel.js

module.exports.addFollowers = function (req, res, next){
    User.findOneAndUpdate({_id: req.user._id}, {$push: {following: req.body.id}}, next)
};

Try this code.

Upvotes: 1

Related Questions