2017-08-24 39 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

相關問題