2017-04-18 3 views
1

Ich versuche eine following/follower-Funktion für eine nodejs/mongoose-getriebene Webseite hinzuzufügen. Ich habe Probleme mit der korrekten Speicherung der ID mit den folgenden Methoden. Nicht ganz sicher, was schief läuft, aber es scheint, nur die ID richtig in den folgenden Teil zu speichern, aber die Nachfolger für den ersten Teil nicht zu aktualisieren.Mungo Follower/Follower

Ich weiß, es wäre einfach, wenn die Benutzer-ID nur an die Post-Anfrage übergeben wird, aber ich dachte, Speichern der Benutzer-ID auf dem Front-End ist eine Art von Sicherheitsproblem, so einfach mit dem Benutzernamen, um die ID zu bekommen sei besser.

// 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(); 
    }); 
    }); 
}); 

Der Benutzer Modell sieht als solche

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' }], 
}); 

Einsicht auf diesem würde sehr geschätzt.

+0

können Sie zeigen, wohin Sie die Antwort zurück an das Frontend senden? –

Antwort

2

Von dem, was ich in Ihrem schema sehen kann, following und followers und eine Reihe von ObjectId's und nicht ObjectId selbst, so müssen Sie die _id in das Array push und nicht seinen Wert auf _id gesetzt.

Auch die zweite update in der callback der save tun. Auf diese Weise können Sie die Antwort zurück an das Frontend senden, nachdem beide updates erfolgreich abgeschlossen wurden.

Versuchen Sie folgendes:

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

Ich hoffe, das hilft Ihnen!

+0

Das hat funktioniert. Danke für die Hilfe dazu. Ich schätze es. – user3630457