【问题标题】:Passing a model.find as argument to be called causes Error将 model.find 作为要调用的参数传递会导致错误
【发布时间】:2014-12-10 20:57:52
【问题描述】:

我使用 ExpressJS 已经有一段时间了。我正在学习使用 Mongoose。

在我的查询回调中:function(error, data) {...} 我有很多重复的代码来处理错误。为此,我创建了一个函数 checkedQuery,它调用查询,处理错误,然后将数据传递给回调。

请注意,下面的一些代码已被删除、简化、注释掉,因为它与实际问题无关。

function checkedQuery( queryFn, callback ) {
  queryFn( function( error, data ) {
    if ( error ) {
      // ServerErrorResponse(....); Handles sending out the proper json error response
      return;
    }
    callback( data );
  });
}

在我的猫鼬模型的其他地方,我定义了一个函数,它只是获取所有用户名的列表:

UserSchema.statics.getNames = function( callback ) {
  var User = mongoose.model('User');
  User.find({}, 'name', callback );
}

同时使用这两个功能我没有问题:

checkedQuery( User.getNames, function( userNames ) {
  // ... Handles the user names
  return;
}

我遇到的问题是当我尝试将 User.find 直接函数传递给 checkedQuery 时:

checkedQuery( User.find, function( users ) {
  // ... Handles the users
  return;
}

在这里,我收到来自 mongoose 模块的错误:

TypeError: Cannot read property 'discriminatorMapping' of undefined
    at find (/mypath/server/node_modules/mongoose/lib/model.js:955:18)

最后,在实际代码中,我想指出,仅使用回调函数调用 User.find 是有效的并且不会导致错误: User.find(函数(错误,用户){ //...处理错误和用户数据 }

我怀疑导致这种情况的范围和参数有问题,但我不确定。非常感谢任何帮助!

另外,如果有任何示例您可以指出我,这些示例显示了创建错误检查查询函数和在功能上传递一般 mongoose 查询的更好模式,我希望有一个经过验证的替代方案。

【问题讨论】:

  • 传递 User.find.bind(User) 而不仅仅是 User.find
  • 谢谢,这成功了。

标签: javascript node.js mongodb express mongoose


【解决方案1】:

将@idbehold 的评论转换为回答:

传递User.find.bind(User) 而不仅仅是User.find

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多