2017-04-18 74 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