Update existing user data in database

风流意气都作罢 提交于 2020-01-16 00:45:14

问题


Currently, I have managed to the save user information inside my database. However I wanted to update the user information inside my database when they logged in if there is changes of information inside Steam database. So it is the same inside my database.

Below are example of information inside my User schema

const UserSchema = mongoose.Schema({
  username:{
    type: String,
  },
  profileURL:{
    type: String,
  },
  profileImageURL:{
    type: String,
  },
  steamId:{
    type: String,
  }
});

Below are example of my app.js. When the user login, I checked if the user steamId exist inside my database, I want to update the user information such as username, profileURL, profileImageURL and its steamID if exist else I create a new user inside my database. How can I achieve this? Currently, I just return done(null, user).

passport.use(new SteamStrategy({
    returnURL: 'http://localhost:3000/auth/steam/return',
    realm: 'http://localhost:3000/',
    apiKey: ''
    }, 
    function (identifier, done){
        var steamId = identifier.match(/\d+$/)[0];
        var profileURL = 'http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=' + 'api_Key' + '&steamids=' + steamId;

        User.findOne({ steamId: steamId}, function(err, user){
            if(user){
                return done(null, user); 
            }
            else{
                request(profileURL, function (error, response, body){
                    if (!error && response.statusCode === 200) 
                    {
                        var data = JSON.parse(body);
                        var profile = data.response.players[0];
                        var user = new User();
                        user.username = profile.personaname;
                        user.profileURL = profile.profileurl;
                        user.profileImageURL = profile.avatarfull;
                        user.steamId = steamId;
                        user.save(function(err){
                            done(err, user);
                        });
                    }
                    else
                    {
                        done(err, null);
                    }
                });
            }
        });
}));

回答1:


You could do this with an upsert-enabled update call. Try something like this:

        request(profileURL, function(err, response, body){
          var data = JSON.parse(body);
          var user = {
          //... construct user object
          }
          
          User.findOneAndUpdate({ steamId: steamId }, user, {upsert: true, new: true, setDefaultsOnInsert: true}, function(err, newUser){
            if (err) return handleError(err);
            done(null, newUser);
          });
        });


来源:https://stackoverflow.com/questions/58440150/update-existing-user-data-in-database

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!