【问题标题】:Using a Mongoose Schema Function Inside Of An Exported Mongoose Model在导出的 Mongoose 模型中使用 Mongoose 模式函数
【发布时间】:2017-06-07 06:13:16
【问题描述】:

我最近一直在研究一个身份验证系统,如果不存在具有给定 ID 的用户,则该系统应该创建一个新用户加载具有现有 ID 的用户。我也已经想通了,你可以通过使用来返回用户是否存在于 ID 中

User.count({_id: id}, function (err, count){ 
    if(count > 0){
      // User exists, continue with loading data
    } else {
      // User does not exist, create one
    }
  });

User 是导出的 Mongoose 模型 mongoose.model('User', UserSchema);

如果我现在在我的 app.js 中创建了一个函数 existsWithId(id),它会工作得很好(从前面提到的代码 工作得很好),但我想将此函数移动到我的 user.js 模型(其中包含 Mongoose / MongoDB 代码),以便我只为该特定模型提供它。每当我尝试使用

UserSchema.statics.existsWithId = function(id) {
  this.count({_id: id}, function (err, count){ 
    return count > 0;
  }); 
}

或类似的方法,但是,一旦我在 app.js 中运行它,它要么只返回 undefined 要么返回错误。

注意:如果这是一个简单甚至愚蠢的问题,我很抱歉,但考虑到使用 Mongoose 进行数据库管理,我还是个新手,虽然我确实有 JS 方面的一些经验,我不是这方面的专业人士。

如果你们中的任何人需要提供额外的代码来回答问题,请随时问我,我会这样做。另外,我还不能 +rep 回答,但我总是很感激他们 :)

【问题讨论】:

  • 现在您可以 +rep 答案

标签: javascript node.js mongodb express mongoose


【解决方案1】:

您的 existsWithId 方法异步返回一个值,因此您可以给它一个回调以获取结果,如下所示:

UserSchema.statics.existsWithId = function(id, cb) {
    this.count({ _id: id }, function(err, count) {
        cb(err, count > 0);
    });
}

User.existsWithId("5882c3be5aad09028d4d8b46", function(err, res) {
    console.log(res);
});

【讨论】:

  • 效果很好,谢谢!一个问题。我还不太了解猫鼬的整个“findByID”概念:我现在如何将user 对象设置为现有对象(我尝试了user = User.findOne({ _id: id });,但显然返回了其他东西。)[编辑:我只记得,完全一样(回调,arrgh)]
  • 这是异步的,你可以通过回调得到结果:User.findOne({ _id: id }, function(err, res) { console.log(res); var user = res; });。如果您不指定回调函数,除非您调用 exec(),否则它不会执行,请参阅:stackoverflow.com/questions/31549857/…
  • 出于某种原因,这只会返回我认为类似于exists 的布尔值。我在这里可能有一个非常明显的错误,但我现在似乎找不到它。这是函数的完整代码:pastebin.com/2FCXkrF4
  • user.data = data;console.log(exists);user.save();必须进入findOne的回调,当用户被找到时
猜你喜欢
  • 2011-10-16
  • 1970-01-01
  • 2015-03-29
  • 2019-05-23
  • 2016-10-21
  • 2018-11-06
  • 2012-12-22
  • 1970-01-01
相关资源
最近更新 更多