我使用 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/