gpt4 book ai didi

node.js+mongoose UserSchema 查找或创建

转载 作者:搜寻专家 更新时间:2023-11-01 00:02:52 25 4
gpt4 key购买 nike

因此,我在我的用户模式上实现了 findOrCreate,它基本上只有一个配置文件数组(每个用户可以有多个登录策略)。您可以认为,通过具有与我们正在调用 findOrCreate 的提供的配置文件匹配的提供者和 id 的配置文件,可以肯定地识别用户。 findOrCreate 的目标是识别与提供的配置文件匹配的用户或使用提供的配置文件创建新用户。该函数有四种返回情况。

  1. 查询用户时出错
  2. 找到用户
  3. 找不到用户并尝试创建用户时发生错误
  4. 未能找到用户并成功创建一个

现在,我相信下面的代码可以做到这一点。我对这个问题的关注和原因是提供给 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);
});
});
});

最佳答案

只需执行 user.save(callback); 因为您的内联匿名函数基本上与 save 已经对其回调所做的相同。 return 语句是纯粹的流程控制机制,其唯一目的是避免执行此函数中的后续代码,并且实际返回值本身完全被调用者忽略,这在 node.js 中的异步编程中很常见。您可以使用 if/else block 而不是 if/return 保护子句来编写相同的逻辑,并且根本不使用 return 关键字,并且仍然得到这个功能正常运行。

关于node.js+mongoose UserSchema 查找或创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15288551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com