2017-04-18 155 views
1

我正在尝试为nodejs/mongoose驱动的网站添加以下/关注者功能。我遇到了使用下面的方法正确存储ID的问题。不太确定发生了什么问题,但它似乎只是将ID正确地保存到下面的部分,而不是更新第一部分的追随者。Mongoose关注/关注者

我知道这很容易,如果用户ID只是传递到发布请求,但我认为存储在前端的用户ID是一种安全问题,所以只是使用用户名来获得ID会会更好。

// Handles the post request for following a user 
router.post('/follow-user', function(req, res, next) { 

    // First, find the user from the user page being viewed 
    User.findOne({ username: req.body.username }, function(err, user) { 

    // Add to users followers with ID of the logged in user 
    user.followers = req.user._id; 

    // Create variable for user from page being viewed 
    var followedUser = user._id; 

    // Save followers data to user 
    user.save(); 

    // Secondly, find the user account for the logged in user 
    User.findOne({ username: req.user.username }, function(err, user) { 

     // Add the user ID from the users profile the follow button was clicked 
     user.following = followedUser; 

     // Save following data to user 
     user.save(); 
    }); 
    }); 
}); 

用户模型看起来这样

var userSchema = new Schema({ 
    username: { type: String, required: true, unique: true }, 
    password: { type: String, required: true }, 
    email: { type: String, required: true }, 
    avatar: { type: String }, 
    bio: { type: String }, 
    following: [{ type: Schema.ObjectId, ref: 'User' }], 
    followers: [{ type: Schema.ObjectId, ref: 'User' }], 
}); 

在此任何了解,将不胜感激。

+0

你可以显示你将回应发回到前端吗? –

回答

2

从我可以在看到你的schemafollowingfollowersObjectId's的阵列,而不是ObjectId本身,所以你需要将_idpush到阵列,并将其值未设置为_id

而且,做第二个updatesavecallback。这样,您可以在updates成功完成后将响应发送回前端。

试试这个:

User.findOne({ username: req.body.username }, function(err, user) { 

    user.followers.push(req.user._id); 
    var followedUser = user._id; 
    user.save(function(err){ 
     if(err){ 
      //Handle error 
      //send error response 
     } 
     else 
     { 
      // Secondly, find the user account for the logged in user 
      User.findOne({ username: req.user.username }, function(err, user) { 

       user.following.push(followedUser); 
       user.save(function(err){ 
        if(err){ 
         //Handle error 
         //send error response 
        } 
        else{ 
         //send success response 
        } 
       }); 
      }); 
     } 
    }); 
}); 

我希望这可以帮助你!

+0

这工作。感谢您的帮助。我很感激。 – user3630457