javascript - 传递 model.find 作为要调用的参数会导致错误

标签 javascript node.js mongodb express mongoose

我使用 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 );
  });
}

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

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 查询的更好模式,我希望有一个经过验证的替代方案。

最佳答案

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

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

关于javascript - 传递 model.find 作为要调用的参数会导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27410685/

相关文章:

javascript - Firebase 实时数据库 fcm 消息发送问题

javascript - 蒙戈 : Update value of string array element using the element itself

javascript - 使用 CSS 隐藏由脚本创建的 div

javascript - javascript中ajax调用中多个三元运算符的语法

mysql - Sequelize updateAttributes 在 socket.on( 'disconnet' ) 中不起作用

mongodb - MongoDB和Ldap是同一个概念吗?

xml - 使用 NLog 在 Mongo 数据库中存储日志

javascript - 如何为 cordova 应用程序启用本地存储

javascript - 如何将 CURL -F @filename 转换为nodejs

node.js - 未处理的拒绝 SequelizeConnectionRefusedError