Javascript 传递要调用的model.find作为参数会导致错误
我已经使用ExpressJS有一段时间了。我正在学着用猫鼬来对付它 在查询的回调中:function(error,data){…}我有很多处理错误的重复代码。为此,我制作了一个函数checkedQuery,它调用查询,处理它的错误,然后将数据传递给回调 注意,下面的一些代码已被删除、简化、注释掉,因为它与实际问题无关Javascript 传递要调用的model.find作为参数会导致错误,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,我已经使用ExpressJS有一段时间了。我正在学着用猫鼬来对付它 在查询的回调中:function(error,data){…}我有很多处理错误的重复代码。为此,我制作了一个函数checkedQuery,它调用查询,处理它的错误,然后将数据传递给回调 注意,下面的一些代码已被删除、简化、注释掉,因为它与实际问题无关 function checkedQuery( queryFn, callback ) { queryFn( function( error, data ) { if (
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 direct函数传递到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是有效的,不会导致错误:
查找(函数(错误,用户){
//…处理错误和用户数据
}
我怀疑导致这种情况的范围和论点有问题,但我不确定。非常感谢您的帮助
另外,如果您能给我举一些例子,说明创建错误检查查询函数和在功能上传递mongoose查询的更好模式,我希望有一个经过验证的替代方案。将@idbehold的注释转换为答案:
传递
User.find.bind(User)
而不仅仅是User.find
传递User.find.bind(User)
而不仅仅是User.find
。谢谢,这很有效。