Обновить существующие данные пользователя в базе данных - PullRequest
1 голос
/ 17 октября 2019

В настоящее время мне удалось сохранить информацию о пользователях в моей базе данных. Однако я хотел обновить информацию о пользователях в моей базе данных, когда они вошли в систему, если в базе данных Steam есть изменения. То же самое в моей базе данных.

Ниже приведен пример информации в моей пользовательской схеме

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

Ниже приведен пример моего app.js. Когда пользователь входит в систему, я проверил, существует ли пользователь steamId внутри моей базы данных, я хочу обновить информацию о пользователе, такую ​​как имя пользователя, profileURL, profileImageURL и его steamID, если таковой существует, иначе я создаю нового пользователя внутри своей базы данных. Как мне этого добиться? В настоящее время я просто возвращаю готово (null, пользователь).

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 Ответ

1 голос
/ 17 октября 2019

Это можно сделать с помощью вызова обновления с поддержкой upsert. Попробуйте что-то вроде этого:

        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);
          });
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...