2017-08-24 8 views
2

mongoose.methodsを使用して、関連するモデルのフィールドをスキーマに割り当てて、エクスプレスミドルウェアのプロパティとしてstraghtforwardを使用したいとします。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エラーを返します。方法は次のよう。

私はこのようなエラーでさまざまなexaplesを探しましたが、それはうまくいくように思われます、私はまた、私のアプリケーションでこれを使用しているときに私はデータベースにacynchronious呼び出しを行う必要があり、なぜそれがエラーを返すのか理解していない。

答えて

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ことはできますか?どのように私は本当にcllabackを渡すのですか? – ASem

+0

スキーマメソッドが 'callback()'を呼び出すときに実行する関数を渡します。私は私の答えを更新しました。 –

+0

これは私を返します。TypeError:this.modelは関数ではありませんが、コールバックの問題を解決しました。ありがとうございます。 – ASem

関連する問題