node.js - 更新数据库中的现有用户数据
问题描述
目前,我已经设法将用户信息保存在我的数据库中。但是,如果 Steam 数据库中的信息发生变化,我想在他们登录时更新我的数据库中的用户信息。所以它在我的数据库中是一样的。
以下是我的用户架构中的信息示例
const UserSchema = mongoose.Schema({
username:{
type: String,
},
profileURL:{
type: String,
},
profileImageURL:{
type: String,
},
steamId:{
type: String,
}
});
下面是我的 app.js 的示例。当用户登录时,我检查了用户 steamId 是否存在于我的数据库中,我想更新用户信息,例如用户名、profileURL、profileImageURL 及其 steamID(如果存在),否则我在数据库中创建一个新用户。我怎样才能做到这一点?目前,我只是返回 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);
}
});
}
});
}));
解决方案
您可以通过启用 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);
});
});
推荐阅读
- loopbackjs - loopback4 通过命令行使用 config.json 创建数据源
- entity-framework - 如何在列表 EFO 核心 Mock 中添加或包含关系船数据
- pandas - 按有序组对 pandas df 进行排名
- php - PHP CodeSniffer 开始缩进
- javascript - 将 Masterpage 从悬停转换为下拉菜单的 onclick
- node.js - 打字稿构建“找不到模块”,但仅在 ubuntu 服务器上
- .net - 如何在 .NET 中读取 GraphMolWrap.SWIGTYPE_p_double 的值?
- terraform - 如何在资源本身中自引用资源输出arn?
- sql - 两个条件都满足时双记录 SQL
- android - 如何修复 java.lang.IndexOutOfBoundsException:索引:0,大小:onbindviewholder 上的 0