如何用mongoose编写谓词实例方法?

时间:2013-06-14 20:01:17

标签: node.js express mongoose pug

这里有一个半菜鸟节点的家伙。在我的玉模板中...我真的很想能够拥有这个界面:

if currentUser.isMemberOfGroup(name)
  -// dosomething 

然而,确定用户的成员资格涉及与猫鼬接口......这总是异步的事情。以mongoose docs为例我想写下这些内容(原谅我,这是用咖啡写的):

userSchema.methods.isMemberOfGroup = (name) ->
  Club.findOne(name: name).populate({
    path: 'members',
    model: 'User',
    match: { _id: @id }
  }).exec (err, club) ->
    club.members.length > 0

有没有办法让这个方法返回bool而不是从exec函数立即返回?设计这样一个界面的“正确”方法是什么?

以下是俱乐部模型的其余部分:

clubSchema = Mongoose.Schema
  name: String
  hashTag: String
  members: [{ type: Mongoose.Schema.Types.ObjectId, ref: 'User' }]

1 个答案:

答案 0 :(得分:0)

Jade是否支持异步功能(似乎它不是https://github.com/visionmedia/jade/issues/641)?如果没有,则必须在呈现模板之前加载该值。

事实上,这通常是一种很好的做法,因为它允许分离关注点(视图不应该知道数据库)。顺便说一句,如果你需要做很多异步条件逻辑,请看https://github.com/olalonde/boolasync(我写的一个模块)。此外,如果您需要进行多个数据库调用,我强烈建议您使用async.series或async.parallel来使您的代码更具可读性(不要超过几层深度)。