更新数据库中的现有用户数据
Update existing user data in database
目前,我已经设法将用户信息保存在我的数据库中。但是,如果 Steam 数据库中的信息发生变化,我想在用户登录时更新我的数据库中的用户信息。所以它在我的数据库中是一样的。
以下是我的用户架构中的信息示例
const UserSchema = mongoose.Schema({
username:{
type: String,
},
profileURL:{
type: String,
},
profileImageURL:{
type: String,
},
steamId:{
type: String,
}
});
以下是我的 app.js 示例。当用户登录时,我检查我的数据库中是否存在用户 steamId,如果存在,我想更新用户信息,如用户名、profileURL、profileImageURL 及其 steamID,否则我在数据库中创建一个新用户。我怎样才能做到这一点?目前,我只是 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);
}
});
}
});
}));
您可以使用支持更新插入的更新调用来执行此操作。尝试这样的事情:
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);
});
});
目前,我已经设法将用户信息保存在我的数据库中。但是,如果 Steam 数据库中的信息发生变化,我想在用户登录时更新我的数据库中的用户信息。所以它在我的数据库中是一样的。
以下是我的用户架构中的信息示例
const UserSchema = mongoose.Schema({
username:{
type: String,
},
profileURL:{
type: String,
},
profileImageURL:{
type: String,
},
steamId:{
type: String,
}
});
以下是我的 app.js 示例。当用户登录时,我检查我的数据库中是否存在用户 steamId,如果存在,我想更新用户信息,如用户名、profileURL、profileImageURL 及其 steamID,否则我在数据库中创建一个新用户。我怎样才能做到这一点?目前,我只是 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);
}
});
}
});
}));
您可以使用支持更新插入的更新调用来执行此操作。尝试这样的事情:
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);
});
});