2017-04-18 10 views
1

nodejs/mongoose駆動ウェブサイトにフォローしている/フォロワー機能を追加しようとしています。以下の方法で正しくIDを取得するのに問題があります。何がうまくいかないのかはっきりしていませんが、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にその値を設定しないようにする必要があります。

またsavecallbackの2番目のupdateを入力してください。 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