【发布时间】: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