因此,我正在对我的用户模式实现
findOrCreate
,它基本上只有一个配置文件数组(每个用户可以有多个登录策略)。您可以认为只要具有匹配提供程序和ID的配置文件,就可以通过使用我们要调用findOrCreate
的提供的配置文件来积极识别用户。 findOrCreate
的目标是识别与提供的配置文件匹配的用户或使用提供的配置文件创建新用户。此功能有四个返回情况。
- 查询用户时发生错误
- 找到了用户
- 在未能找到用户并尝试创建一个后发生错误
- 未能找到用户并成功创建了一个
现在,我相信以下代码可以实现这一点。我提出这个问题的原因是findOne
所提供的回调函数不一致。如果在查询用户时出现错误,我们返回callback(...),如果找到用户,则返回callback(...)但是,如果我们需要创建用户,则从未明确返回。是否有一种方法可以返回保存的结果?这样做是否正确?
代码:
UserSchema.static('findOrCreate', function (profile, callback) {
this.findOne({ profiles: { $elemMatch: { provider: profile.provider, id: profile.id }}}, function(err, user) {
if (err)
return callback(err);
if (user)
return callback(null, user);
user = new User({
profiles: [profile]
});
user.save(function (err, user) {
if (err)
return callback(err);
return callback(null, user);
});
});
});