2017-08-24 42 views
2

我想使用mongoose.methods将相关模型中的字段分配给架构,以便将其作为express express middleware中的属性使用。作为方法如下:尝试设置mongoose.method时无法获得回调

userSchema.methods.accountGroupOfUser = function accountGroupOfUser(callback) { 
    return this.model('User') 
     .findById(this.id) 
     .populate({path: 'roles.account', model: 'Account', select: 'groups'}) 
     .exec(function(err, user) { 
     if (err) { 
      return callback(err, null); 
     } 
     return callback(null, user.roles.account.groups[0]); 
     }); 
    }; 

和中间件

app.use(function(req, res, next) { 
    res.locals.user = {}; 
    res.locals.user.accountGroupOfUser = req.user && req.user.accountGroupOfUser(); 

    next(); 
}); 

并返回我callback is not a function错误。

我寻找类似于这个错误的各种例外,但它似乎应该工作,我也在我的应用程序中使用这样的函数,当我需要对数据库进行异步调用并且它工作时,所以我真的不明白为什么它会返回错误。

回答

1

看着你的代码,你的'accountGroupOfUser'函数期望一个回调函数被传递给它,但你没有通过它。

试试这个:

app.use(function(req, res, next) { 
    res.locals.user = {}; 
    res.locals.user.accountGroupOfUser = req.user && req.user.accountGroupOfUser(function(err, group) { 
     // Code here 
    }); 

    next(); 
}); 
+0

你能elabolarate吗?我如何通过临屋区权利? – ASem

+0

当你的模式方法调用'callback()'时,你传递你想运行的函数。我已经更新了我的答案。 –

+0

现在它返回我TypeError:this.model不是一个函数,但它解决了回调的问题,谢谢。 – ASem

相关问题