2016-04-25 16 views
0

私はパラメータをチェックしたいいくつかのルートを持っています。これを実行すると、すべてが正常に動作します:それは静的メソッドとしてモデルUserに、共有ライブラリであるとして静的として宣言されたミドルウェアのmongooseモデルにアクセスできない

var User = require('../../models/user'); 
router.param('userId', existsMiddleware) 
router.get('/users/:userId, doSomething); 

function existsMiddleware(req, res, next, userId) { 
    User 
     .findById(userId) 
     .exec(function(err, user) { 
     var errObj = { status: 404, message: 'No user with that ID'}; 
     if (err) { 
      res.status(errObj.status).json(errObj); 
     } else { 
      !!user ? next() : res.status(errObj.status).json(errObj); 
     } 
     }); 
} 

私は便宜のために、それを移動したいと思います。問題は、この特定のケースでモデル(this)にアクセスできないことです。

のは、ルートファイルを修正してくださいしてみましょう:

var User = require('../../models/user'); 
router.param('userId', User.existsMiddleware) 
router.get('/users/:userId, doSomething); 

そして、私のユーザーにスキーマ私が持っている:

var user = mongoose.Schema(schemaObject); 
user.statics.existsMiddleware = existsMiddleware; 
module.exports = mongoose.model('User', user); 

function existsMiddleware(req, res, next, userId) { 
    this 
     .findById(userId) 
     .exec(function(err, user) { 
     var errObj = { status: 404, message: 'No user with that ID'}; 
     if (err) { 
      res.status(errObj.status).json(errObj); 
     } else { 
      !!user ? next() : res.status(errObj.status).json(errObj); 
     } 
     }); 
} 

問題がデバッグするとき、関数の内部existsMiddlewareundefinedに評価されていることで、 ではない私が持っている他の静的メソッドのために起きているし、それを採用しています。

答えて

0

は、あなただけのモデルに関数をバインドする必要があります:実際に働く

router.param('userId', User.existsMiddleware.bind(User)) 
+0

を。どうもありがとう!私はまだこの特定のケースでは、オブジェクト 'User'がなぜ縛られていないのだろうと思っています。 –

関連する問題