试图在Mongoose子阵列中添加关注者

时间:2017-03-27 17:23:50

标签: node.js mongodb mongoose

我正在学习node.js,我正在试图弄清楚如何将用户添加到我的架构中的子阵列。我基本上是在做一个twitter-clone,以了解节点是如何工作的。

这是我的UserSchema。我想将用户添加到“follow”字段数组中。

#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);

在此文件中,您将找到用于将用户添加到“以下”子阵列中的架构方法:

#Usermodel.js

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

我正在查询路由以调用我的架构函数。它看起来像这样:

#routes.js

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

在我的ejs前端,我尝试通过向我的路线发送GET请求来调用我的架构函数:

#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>

不知道该怎么做。当我按下“关注”按钮时,我的网站会继续加载。无法在stackoverflow上找到任何可以帮助我在这个阶段更多的帖子。

谁知道什么是错的?这是正确的方法吗?

1 个答案:

答案 0 :(得分:1)

  

在#Usermodel.js

中进行一些更改
module.exports.addFollowers = function (req, res, next){
    User.findOneAndUpdate({_id: req.user._id}, {$push: {following: req.body.id}}, next)
};

试试这段代码。