传递一个model.find作为被调用的参数会导致错误

我一直在使用ExpressJS一段时间。 我正在学习使用mongoose。

在我的查询callback函数(错误,数据){…}我有很多重复的代码处理错误。 为此我做了一个函数checkedQuery调用查询,处理它的错误,然后将数据传递给callback。

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

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 ); } 

一起使用这两个function我没有问题:

 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只有一个callback函数是有效的,并不会导致错误:User.find(function(error,users){// …. Handle error AND user data }

我怀疑造成这种情况的范围和论据有问题,但我不确定。 任何帮助深表感谢!

此外,如果有任何示例,您可以指向我哪些显示更好的模式来创build错误检查查询function和function上传递一般mongoose查询,我很想有一个经过validation的替代scheme。

转换@ idbehold的评论回答:

通过User.find.bind(User)而不是只是User.find